Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dane SEGMENT ;segment danych
- lbin dw 0
- lbin2 dw 0 ; do sumy calkowitych
- buf_1 db 4 dup (0) ; wpisujemy liczby
- buf_2 db 7 dup (0) ; reszta ascii
- buf_22 db 7 dup (0) ; calosci ascii
- wynik_dziel db 7 dup (0), '$'
- kon_dz_wyn db ?
- dane ENDS
- rozkazy SEGMENT 'CODE' use16 ;segment zawierający rozkazy programu
- ASSUME cs:rozkazy, ds:dane
- wystartuj:
- mov ax, SEG dane
- mov ds, ax
- mov cx, 4; wpisanie 4 cyfr
- mov si, OFFSET buf_1; przenies adres pierwszego elementy tablicy buf_1 do si
- wpisz:
- mov ah, 1
- int 21H; przeczytaj znak z klawiatury
- sub al,30h ;zamien na liczbe
- mov [si], al; wpisz do tablicy buf_1
- inc si; wskaz na nastepny element tablicy
- loop wpisz
- jmp dalej;po wpisaniu calej liczby skocz dalej
- dalej:
- mov si, OFFSET buf_1 ;wskaz na pierwsza liczbe w wczytanej tablicy
- mov cx, 4 ;4 liczby
- mov lbin, 0 ;wyzeruj wynik
- zamien:
- mov bl, [si] ; bl -> pierwsza liczba z tablicy
- mov bh, 0 ;zerowanie rejestru BH
- mov ax, 6 ;mnoznik
- mul lbin ;mnozenie dotychczas uzyskanego wyniku przez 6
- add ax, bx ;dodanie aktualnie wczytanej cyfry
- mov lbin, ax ;przesłanie wyniku obliczenia do rejestru SI
- inc si ; wskaz na nastepny element
- loop zamien
- ; po zamianie
- mov ax, lbin ; mlodsza czesc dzielnej
- mov cx, 6 ; 4 liczby
- mov bx, 3 ; dzielnnik
- mov si, 6 ;indeks poczatkowy w tablicy buf_2
- mov di, 0 ;ilosc cyfr w buf_22
- dzielenie:
- mov dx, 0 ;zerowanie starszej czesci dzielnej
- mov bx, 3
- div bx ;dzielenie przez 3; iloraz w AX, reszta w DX
- add dx, 30H ;zamiana reszty na kod ASCII
- mov buf_2[si], dl ;odesłanie kodu ASCII kolejnej cyfry do tablicy
- mov bx, di
- mov buf_22[bx],al
- dec si ;zmniejszenie indeksu w rejestrze SI o 1
- inc di
- loop dzielenie ;sterowanie petla
- ; po podzieleniu
- mov bx, OFFSET buf_22
- mov cx,4
- sumuj:
- mov ax,[bx]
- add lbin2,ax
- inc bx
- loop sumuj
- mov ax,lbin2
- mov cx,6
- mov bx,3
- mov si,6
- zamien_sume:
- mov dx, 0 ;zerowanie starszej czesci dzielnej
- div bx ;dzielenie przez 3; iloraz w AX, reszta w DX
- add dx,30h
- mov wynik_dziel[si], dl
- dec si
- loop zamien_sume
- nowa_linia:
- mov dl, 13
- mov ah, 2
- int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
- mov dl, 10
- mov ah, 2
- int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
- mov cx, 7
- mov bx, OFFSET buf_2 ;wpisanie do rejestru BX obszaru
- wyswietl:
- mov dl, [bx] ;wpisanie do rejestru DL kodu ASCII
- cmp dl,'$'
- je nowa_linia2
- mov ah, 2
- int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
- inc bx ;inkrementacja adresu kolejnego znaku
- loop wyswietl
- nowa_linia2:
- mov dl, 13
- mov ah, 2
- int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
- mov dl, 10
- mov ah, 2
- int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
- mov bx, OFFSET wynik_dziel
- wyswietl_sume:
- mov dl, [bx] ;wpisanie do rejestru DL kodu ASCII
- ;kolejnego wyświetlanego znaku
- cmp dl,'$'
- je koniec
- mov ah, 2
- int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
- inc bx ;inkrementacja adresu kolejnego znaku
- loop wyswietl_sume
- koniec:
- mov al, 0 ;kod powrotu programu (przekazywany przez
- ;rejestr AL) stanowi syntetyczny opis programu
- ;przekazywany do systemu operacyjnego
- ;(zazwyczaj kod 0 oznacza, że program został
- ;wykonany poprawnie)
- mov ah, 4CH ;zakończenie programu – przekazanie sterowania
- ;do systemu, za pomocą funkcji 4CH DOS
- 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