Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .386
- .MODEL FLAT, STDCALL
- lstrlenA PROTO :DWORD
- .data
- .code
- fillRegister proc
- mov eax,1000
- ret
- fillRegister endp
- ScanInt PROC
- ;; funkcja ScanInt przekształca ciąg cyfr do liczby, którą jest zwracana przez EAX
- ;; argument - zakończony zerem wiersz z cyframi
- ;; rejestry: EBX - adres wiersza, EDX - znak liczby, ESI - indeks cyfry w wierszu, EDI - tymczasowy
- ;--- początek funkcji
- push EBP
- mov EBP, ESP ; wskaźnik stosu ESP przypisujemy do EBP
- ;--- odkładanie na stos
- push EBX
- push ECX
- push EDX
- push ESI
- push EDI
- ;--- przygotowywanie cyklu
- mov EBX, [EBP+8]
- push EBX
- call lstrlenA
- mov EDI, EAX ;liczba znaków
- mov ECX, EAX ;liczba powtórzeń = liczba znaków
- xor ESI, ESI ; wyzerowanie ESI
- xor EDX, EDX ; wyzerowanie EDX
- xor EAX, EAX ; wyzerowanie EAX
- mov EBX, [EBP+8] ; adres tekstu
- ;--- cykl --------------------------
- pocz:
- cmp BYTE PTR [EBX+ESI], 0h ;porównanie z kodem \0
- jne @F
- jmp et4
- @@:
- cmp BYTE PTR [EBX+ESI], 0Dh ;porównanie z kodem CR
- jne @F
- jmp et4
- @@:
- cmp BYTE PTR [EBX+ESI], 0Ah ;porównanie z kodem LF
- jne @F
- jmp et4
- @@:
- cmp BYTE PTR [EBX+ESI], 02Dh ;porównanie z kodem -
- jne @F
- mov EDX, 1
- jmp nast
- @@:
- cmp BYTE PTR [EBX+ESI], 030h ;porównanie z kodem 0
- jae @F
- jmp nast
- @@:
- cmp BYTE PTR [EBX+ESI], 039h ;porównanie z kodem 9
- jbe @F
- jmp nast
- ;----
- @@:
- push EDX ; do EDX procesor może zapisać wynik mnożenia
- mov EDI, 10
- mul EDI ;mnożenie EAX * EDI
- mov EDI, EAX ; tymczasowo z EAX do EDI
- xor EAX, EAX ;zerowani EAX
- mov AL, BYTE PTR [EBX+ESI]
- sub AL, 030h ; korekta: cyfra = kod znaku - kod 0
- add EAX, EDI ; dodanie cyfry
- pop EDX
- nast:
- inc ESI
- loop pocz
- ;--- wynik
- or EDX, EDX ;analiza znacznika EDX
- jz @F
- neg EAX
- @@:
- et4:;--- zdejmowanie ze stosu
- pop EDI
- pop ESI
- pop EDX
- pop ECX
- pop EBX
- ;--- powrót
- mov ESP, EBP ; przywracamy wskaźnik stosu ESP
- pop EBP
- ret 4
- ScanInt ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement