SHARE
TWEET

Untitled

a guest Dec 18th, 2018 55 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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top