Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .686
  2. .model flat
  3.  
  4. public _zamianaStringa
  5.  
  6. .code
  7. _zamianaStringa PROC
  8.     ; prolog
  9.     push ebp
  10.     mov ebp, esp
  11.    
  12.     push esi
  13.     push edi
  14.     push ebx
  15.  
  16.     ; zerowanie rejestru EAX, który odpowiada ilości zamian znaku jaka wystąpiła
  17.     xor eax, eax
  18.  
  19.  
  20.     mov edi, [ebp + 8]          ; przypisywanie do rejestru EDI adresu pierwszego znaku w tablicy znaków
  21.     mov ebx, [ebp + 12]         ; przypisywanie do rejestru EBX kodu znaku, który ma być zamieniany
  22.     mov ecx, [ebp + 16]         ; przypisywanie do rejestru ECX kodu znaku, na który ma być zamieniany
  23.  
  24. zamien:
  25.     ; przypisanie do rejestru DL kodu znaku znajdującego się pod adresem EDI
  26.     mov dl, [edi]
  27.  
  28.     ; sprawdzenie czy pobrany znak nie oznacza końca sekwencji znaków; jeżeli tak
  29.     ; to przeskocz na koniec programu
  30.     cmp dl, 0
  31.     je koniec
  32.  
  33.     ; sprawdzenie czy pobrany znak to znak, który należy zamienić; jeżeli nie to przeskoczenie dalej
  34.     ; do inkrementacji adresu i powtórzenia pętli
  35.     cmp dl, [ebx]
  36.     jne dalej
  37.  
  38.     mov esi, 1
  39.     ; miejsca w ktorym zalapuje pierwszy wyraz ciagu
  40. kolejny_znak_podciagu:
  41.    
  42.     ; zapisywanie do rejestru DL kolejnego znaku z tablicy znaków cigu który musi być wyłapany
  43.     mov dl, [ebx + esi]
  44.  
  45.     ; sprawdzanie czy to nie koniec ciągu znaków i jeżeli tak to przystąp do zamieniania podciągów
  46.     cmp dl, 0
  47.     je zamien_podciagi
  48.  
  49.     ; porównanie znaku z ciągu szukanego ze znakiem i przerwanie pętli jeżeli nie jest zgodny
  50.     cmp dl, [edi + esi]
  51.     jne dalej
  52.  
  53.     inc esi
  54.     jmp kolejny_znak_podciagu
  55.  
  56. zamien_podciagi:
  57.    
  58.     ; inkrementowanie rejestru EAX który zwarca liczbę zamian
  59.     inc eax
  60.     ; zerowanie indeksu ESI
  61.     xor esi, esi
  62. zamiana_pojedynczego_znaku:
  63.  
  64.     ; zapisywanie do rejestru DL konkretnego znaku z tablicy znaków na jakie zamieniony będize ciąg
  65.     mov dl, [ecx + esi]
  66.  
  67.     ; sprawdzanie czy to nie koniec ciągu znaków
  68.     cmp dl, 0
  69.     je dalej
  70.  
  71.     ; zamiana pojedyńczego znaków
  72.     mov [edi + esi], dl
  73.    
  74.     ; inkrementowanie indeksu
  75.     inc esi
  76.     jmp zamiana_pojedynczego_znaku
  77.  
  78. dalej:
  79.     ; inkrementacja adresu i przeskoczenie na początek pętli
  80.     inc edi
  81.     jmp zamien
  82.  
  83. koniec:
  84.     ; przywrócenie rejestrów i zakończenie programu
  85.     pop ebx
  86.     pop edi
  87.     pop esi
  88.  
  89.     pop ebp
  90.     ret
  91. _zamianaStringa ENDP
  92. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement