Dev2
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...