Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dane SEGMENT ;segment danych
- Buf_1 db 4 dup(0)
- LBin dw 0
- Buf_2 db 128 dup(0)
- dane ENDS
- rozkazy SEGMENT 'CODE' use16 ;segment zawierający rozkazy programu
- ASSUME cs:rozkazy, ds:dane
- wystartuj:
- mov ax, SEG dane
- mov ds, ax
- ; wczytywanie liczby do AX, zakonczenie wczytywania po Enter
- mov si, 0 ;poczatkowa wartosc wyniku konwersji w SI
- p1: mov ah, 1 ;wczytanie znaku w kodzie ASCII
- int 21H ;z klawiatury do AL
- cmp al, 13
- je nacis_enter ;skok gdy nacisnieto klawisz Enter
- sub al, 30H ;zamiana kodu ASCII na wartosc cyfry
- mov bl, al ;przechowanie kolejnej cyfry w AL
- mov bh, 0 ;zerowanie rejestru BH
- mov ax, 8 ;mnoznik
- mul si ;mnozenie dotychczas uzyskanego wyniku przez
- ;8 iloczyn zostaje wpisany do rejestrów DX:AX
- add ax, bx ;dodanie aktualnie wczytanej cyfry
- mov si, ax ;przesłanie wyniku obliczenia do rejestru SI
- jmp p1 ;
- nacis_enter:
- mov ax, si ;przepisanie wyniku konwersji do rejestru AX
- mov LBin, ax
- mov cx, 0 ;licznik cyfr
- mov bx, 9 ;dzielnik 9
- p2: mov dx, 0 ;zerowanie starszej czesci dzielnej
- div bx ;dzielenie przez 9 – iloraz w AX, reszta w DX
- add dx, 30H ;zamiana reszty na kod ASCII
- push dx ;zapisanie cyfry na stosie
- inc cx ;inkrementacja licznika cyfr
- cmp ax, 0 ;porównanie uzyskanego ilorazu
- jnz p2 ;skok gdy iloraz jest rózny od zera
- p3: pop dx ;pobranie kodu ASCII kolejnej cyfry
- mov ah, 2
- int 21H ;wyswietlenie cyfry na ekranie
- loop p3 ; sterowanie petla wyswietlania
- mov al, 0
- mov ah, 4CH
- int 21H
- rozkazy ENDS
- nasz_stos SEGMENT stack ;segment stosu
- dw 128 dup (?)
- nasz_stos ENDS
- END wystartuj ;wykonanie programu zacznie się od rozkazu
- ;opatrzonego etykietą wystartuj
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement