Dev2

 avatar
unknown
assembly_x86
3 years ago
2.4 kB
5
Indexable
stepFour:

	INC dword[occurrence_count] ;Le compteur d'occurence va être incrémenté pour chaque succès de l'étape 2
	;Ce compteur d'occurence va être affiché à la fin du programme pour informer l'utilisateur du nombre d'occurences trouvées
	
	MOV EDX, dword[token_length]
	CMP dword[replacement_length], EDX
	
	JG rep_is_greater
	
	push messageEchec
	call _printf					
	add esp, 4
	JMP fin
	
rep_is_greater: ;Cas de taille_remplacement > taille_cible

	;Avant de passer à l'étape de remplacement, on doit faire le shift de la chaine après la cible vers la droite
	;Pour faire cela, on va utiliser EDI et ESI
	;EDI va pointer vers la fin de la chaine + la différence entre cible et remplacement
	;ESI va pointer vers la fin de la chaine
	;Les caractères vont être passé un par un, en commençant de la fin, de ESI vers EDI

	MOV EDX, dword[replacement_length]
	SUB EDX, dword[token_length]	;On fait la soustraction de taille_remp et taille_cible pour avoir la différence

	STD	;STD pour que ECX part de la droite à la gauche
	MOV EDI, text		 ;Ici, EDI pointe vers premier caractère du texte
	ADD EDI, text_length ;Ici, EDI pointe vers le dernier caractère du texte qui est 0
	ADD EDI, EDX		 ;Ici, EDI pointe vers la fin de la nouvelle chaine, donc taille_texte + difference
	
	MOV ESI, text		 ;Ici, ESI pointe vers le premier caractère du texte
	ADD ESI, text_length ;Ici, ESI pointe vers la fin du texte, qui est 0
	
	;Calcul de la taille de la position vers la fin de la chaine
	; MOV EDX, dword[text_length]
	; SUB EDX, EBX
	; DEC EDX
	
	; MOV rest_length, dword[EDX] ;rest_length va stocker taille - position - 1
	
	MOV ECX, dword[text_length]
	SUB ECX, EBX
	DEC ECX

	REP MOVSB
	
	;Etape 4: Remplacement de la cible par le mot de remplacement
	CLD
	MOV ECX, dword[replacement_length]
	MOV ESI, replacement
	MOV EDI, EBX
	
	REP MOVSB	;Extraction des lettres de la cible à EDI (en commençant à la position) un par un
						
	
	;Après remplacement du cible, on restore la valeur de ECX et EDI
	;Puis on revient à l'étape 1 pour continuer la recherche des autres occurrences
	pop ECX
	pop EDI
	JMP stepOne
	
	
	
fin:

	push text
	push resultat
	call _printf					
	add esp, 8
	
	push dword[occurrence_count]
	push token
	push messageOccurrence
	call _printf					
	add esp, 12
Editor is loading...