Advertisement
kamasazi99

asm lab 6, biblioteka

Nov 30th, 2019
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .MODEL FLAT, STDCALL
  3. lstrlenA PROTO :DWORD
  4. .data
  5.  
  6. .code
  7.  
  8. fillRegister proc
  9. mov eax,1000
  10. ret
  11. fillRegister endp
  12.  
  13.  
  14.  
  15. ScanInt   PROC
  16.     ;; funkcja ScanInt przekształca ciąg cyfr do liczby, którą jest zwracana przez EAX
  17.     ;; argument - zakończony zerem wiersz z cyframi
  18.     ;; rejestry: EBX - adres wiersza, EDX - znak liczby, ESI - indeks cyfry w wierszu, EDI - tymczasowy
  19.     ;--- początek funkcji
  20.        push   EBP
  21.        mov   EBP, ESP   ; wskaźnik stosu ESP przypisujemy do EBP
  22.     ;--- odkładanie na stos
  23.        push   EBX
  24.        push   ECX
  25.        push   EDX
  26.        push   ESI
  27.        push   EDI
  28.     ;--- przygotowywanie cyklu
  29.        mov   EBX, [EBP+8]
  30.        push   EBX
  31.        call   lstrlenA
  32.        mov   EDI, EAX   ;liczba znaków
  33.        mov   ECX, EAX   ;liczba powtórzeń = liczba znaków
  34.        xor   ESI, ESI   ; wyzerowanie ESI
  35.        xor   EDX, EDX   ; wyzerowanie EDX
  36.        xor   EAX, EAX   ; wyzerowanie EAX
  37.        mov   EBX, [EBP+8] ; adres tekstu
  38.     ;--- cykl --------------------------
  39.     pocz:
  40.        cmp   BYTE PTR [EBX+ESI], 0h   ;porównanie z kodem \0
  41.        jne   @F
  42.        jmp   et4
  43.     @@:
  44.        cmp   BYTE PTR [EBX+ESI], 0Dh   ;porównanie z kodem CR
  45.        jne   @F
  46.        jmp   et4
  47.     @@:
  48.        cmp   BYTE PTR [EBX+ESI], 0Ah   ;porównanie z kodem LF
  49.        jne   @F
  50.        jmp   et4
  51.     @@:
  52.        cmp   BYTE PTR [EBX+ESI], 02Dh   ;porównanie z kodem -
  53.        jne   @F
  54.        mov   EDX, 1
  55.        jmp   nast
  56.     @@:
  57.        cmp   BYTE PTR [EBX+ESI], 030h   ;porównanie z kodem 0
  58.        jae   @F
  59.        jmp   nast
  60.     @@:
  61.        cmp   BYTE PTR [EBX+ESI], 039h   ;porównanie z kodem 9
  62.        jbe   @F
  63.        jmp   nast
  64.     ;----
  65.     @@:    
  66.         push   EDX   ; do EDX procesor może zapisać wynik mnożenia
  67.        mov   EDI, 10
  68.        mul   EDI      ;mnożenie EAX * EDI
  69.        mov   EDI, EAX   ; tymczasowo z EAX do EDI
  70.        xor   EAX, EAX   ;zerowani EAX
  71.        mov   AL, BYTE PTR [EBX+ESI]
  72.        sub   AL, 030h   ; korekta: cyfra = kod znaku - kod 0    
  73.        add   EAX, EDI   ; dodanie cyfry
  74.        pop   EDX
  75.     nast:  
  76.         inc   ESI
  77.        loop   pocz
  78.     ;--- wynik
  79.        or   EDX, EDX   ;analiza znacznika EDX
  80.        jz   @F
  81.        neg   EAX
  82.     @@:    
  83.     et4:;--- zdejmowanie ze stosu
  84.        pop   EDI
  85.        pop   ESI
  86.        pop   EDX
  87.        pop   ECX
  88.        pop   EBX
  89.     ;--- powrót
  90.        mov   ESP, EBP   ; przywracamy wskaźnik stosu ESP
  91.        pop   EBP
  92.        ret  4
  93.     ScanInt   ENDP
  94.  
  95. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement