Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .686
- .model flat
- public _zamianaStringa
- .code
- _zamianaStringa PROC
- ; prolog
- push ebp
- mov ebp, esp
- push esi
- push edi
- push ebx
- ; zerowanie rejestru EAX, który odpowiada ilości zamian znaku jaka wystąpiła
- xor eax, eax
- mov edi, [ebp + 8] ; przypisywanie do rejestru EDI adresu pierwszego znaku w tablicy znaków
- mov ebx, [ebp + 12] ; przypisywanie do rejestru EBX kodu znaku, który ma być zamieniany
- mov ecx, [ebp + 16] ; przypisywanie do rejestru ECX kodu znaku, na który ma być zamieniany
- zamien:
- ; przypisanie do rejestru DL kodu znaku znajdującego się pod adresem EDI
- mov dl, [edi]
- ; sprawdzenie czy pobrany znak nie oznacza końca sekwencji znaków; jeżeli tak
- ; to przeskocz na koniec programu
- cmp dl, 0
- je koniec
- ; sprawdzenie czy pobrany znak to znak, który należy zamienić; jeżeli nie to przeskoczenie dalej
- ; do inkrementacji adresu i powtórzenia pętli
- cmp dl, [ebx]
- jne dalej
- mov esi, 1
- ; miejsca w ktorym zalapuje pierwszy wyraz ciagu
- kolejny_znak_podciagu:
- ; zapisywanie do rejestru DL kolejnego znaku z tablicy znaków cigu który musi być wyłapany
- mov dl, [ebx + esi]
- ; sprawdzanie czy to nie koniec ciągu znaków i jeżeli tak to przystąp do zamieniania podciągów
- cmp dl, 0
- je zamien_podciagi
- ; porównanie znaku z ciągu szukanego ze znakiem i przerwanie pętli jeżeli nie jest zgodny
- cmp dl, [edi + esi]
- jne dalej
- inc esi
- jmp kolejny_znak_podciagu
- zamien_podciagi:
- ; inkrementowanie rejestru EAX który zwarca liczbę zamian
- inc eax
- ; zerowanie indeksu ESI
- xor esi, esi
- zamiana_pojedynczego_znaku:
- ; zapisywanie do rejestru DL konkretnego znaku z tablicy znaków na jakie zamieniony będize ciąg
- mov dl, [ecx + esi]
- ; sprawdzanie czy to nie koniec ciągu znaków
- cmp dl, 0
- je dalej
- ; zamiana pojedyńczego znaków
- mov [edi + esi], dl
- ; inkrementowanie indeksu
- inc esi
- jmp zamiana_pojedynczego_znaku
- dalej:
- ; inkrementacja adresu i przeskoczenie na początek pętli
- inc edi
- jmp zamien
- koniec:
- ; przywrócenie rejestrów i zakończenie programu
- pop ebx
- pop edi
- pop esi
- pop ebp
- ret
- _zamianaStringa ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement