Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .686
- .model flat
- extern __write : PROC
- extern __read : PROC
- extern _ExitProcess@4 : PROC
- public _main
- .data
- znaki db 12 dup (?)
- obszar db 12 dup (?)
- dziesiec dd 10 ; mnoznik
- .code
- wczytaj_EAX PROC
- push ebx
- push ecx
- push edx
- ; max ilość znaków wczytywanej liczby
- push dword PTR 12
- push dword PTR OFFSET obszar ; adres obszaru pamięci
- push dword PTR 0; numer urządzenia (0 dla klawiatury)
- call __read ; odczytywanie znaków z klawiatury
- ; (dwa znaki podkreślenia przed read)
- add esp, 12 ; usunięcie parametrów ze stosu
- ; bieżąca wartość przekształcanej liczby przechowywana jest
- ; w rejestrze EAX; przyjmujemy 0 jako wartość początkową
- mov eax, 0
- mov ebx, OFFSET obszar ; adres obszaru ze znakami
- pobieraj_znaki:
- mov cl, [ebx] ; pobranie kolejnej cyfry w kodzie
- ; ASCII
- inc ebx ; zwiększenie indeksu
- cmp cl,10 ; sprawdzenie czy naciśnięto Enter
- je byl_enter ; skok, gdy naciśnięto Enter
- sub cl, 30H ; zamiana kodu ASCII na wartość cyfry
- movzx ecx, cl ; przechowanie wartości cyfry w
- ; rejestrze ECX
- ; mnożenie wcześniej obliczonej wartości razy 10
- mul dword PTR dziesiec
- add eax, ecx ; dodanie ostatnio odczytanej cyfry
- jmp pobieraj_znaki ; skok na początek pętli
- byl_enter:
- ; wartość binarna wprowadzonej liczby znajduje się teraz w rejestrze EAX
- pop edx
- pop ecx
- pop ebx
- ret
- wczytaj_EAX ENDP
- wyswietl_EAX PROC
- pusha
- mov esi, 10 ; indeks w tablicy znaki
- mov ebx, 10 ; dzielnik rowny 10
- konwersja:
- mov edx, 0 ; zerowanie starszej części dzielnej
- div ebx ; dzielenie przez 10, reszta w edx, iloraz w eax
- add dl, 30h ; zamiana reszty na ASCII
- mov znaki [esi] , dl ; zapisanie cyfryw ASCII
- dec esi ; zmniejszenie indeksu
- cmp eax, 0 ;sprawdzenie czy iloraz = 0
- jne konwersja ; skok gdy iloraz niezerowy
- ; spacje i nowe linie
- wypeln:
- or esi, esi
- jz wyswietl ; skok gdy esi = 0
- mov byte PTR znaki [esi], 20h ; kod spacji
- dec esi ; zminiejszenie indeksu
- jmp wypeln
- wyswietl:
- mov byte PTR znaki [0], 0Ah ; kod new lajn
- mov byte PTR znaki [11], 0Ah
- ; na ekran
- push dword PTR 12
- push dword PTR OFFSET znaki
- push dword PTR 1
- call __write
- add esp, 12
- popa
- ret
- wyswietl_EAX ENDP
- _main:
- call wczytaj_EAX
- mul eax
- call wyswietl_EAX
- push 0
- call _ExitProcess@4
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement