Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- start:
- ; wyĹwietl wiadomoĹÄ powitalnÄ
- mov ah, 9
- mov dx, msg0
- int 21h
- mov dx, enter1
- int 21h
- ; pobierz ile liczb ma zostaÄ pobranych (tu zawsze 2)
- mov ax, [liczb]
- mov [i], ax
- ; wczytuj i liczb
- cinnum:
- mov ah, 9
- mov dx, msg1
- int 21h
- ; przygotuj zmienne do wczytania liczby
- xor ax, ax
- xor cx, cx
- mov [val], ax
- mov bx, 10
- ; wczytaj liczbÄ, przerwij po wciĹniÄciu ENTERa (znak 13)
- cinbeg:
- mov ah, 1
- int 21h
- cmp al, 13 ; jeĹli enter to przerwij wczytywanie
- je cinend
- mov cl, al
- sub cl, 48
- mov ax, [val]
- xor dx, dx
- mul bx
- add ax, cx
- mov [val], ax
- jmp cinbeg ; wrĂłÄ do wczytania kolejnej liczby
- cinend:
- mov ax, [val]
- push ax ; przechowaj liczbÄ na stosie
- mov ax, [i]
- dec ax
- mov [i], ax
- cmp ax, 0
- ja cinnum
- ; pokaĹź komunikat z proĹbÄ o znak operacji
- mov ah, 9
- mov dx, msg2
- int 21h
- mov ah, 1
- int 21h
- mov dl, al
- ; pobierz odĹoĹźone na stos liczby
- pop bx ; kolejnoĹÄ jest waĹźna, poniewaĹź od tego zaleĹźy wynik odejmowania / dzielenia
- pop ax
- ; sprawdĹş znak jaki zostaĹ wybrany i przejdĹş do odpowiedniej sekcji operatora
- cmp dl, 43
- je oadd
- cmp dl, 45
- je osub
- cmp dl, 42
- je omul
- cmp dl, 47
- je odiv
- ; jeĹli znak nie zostanie znalezion to wypisz bĹÄ d
- jmp error
- ; sekcje operacji dla kaĹźdego z operatorĂłw
- oadd:
- add ax, bx
- mov [val], ax
- jmp wypisz
- osub:
- sub ax, bx
- mov [val], ax
- jmp wypisz
- omul:
- xor dx, dx
- mul bx
- mov [val], ax
- jmp wypisz
- odiv:
- xor dx, dx
- div bx
- mov [val], ax
- jmp wypisz
- ; wypisywanie wyniku
- wypisz:
- ; komunikat
- mov ah, 9
- mov dx, enter1
- int 21h
- mov ah, 9
- mov dx, msg3
- int 21h
- ; przygotuj rejestry: ax - wartoĹÄ do wypisania, cx - ile cyfr oraz bx - system liczby do wypisania
- mov ax, [val]
- mov cx, 0
- mov bx, 10
- rcyfry:
- xor dx, dx
- div bx
- push dx
- inc cx
- cmp ax, 0
- ja rcyfry
- ; wypisz cyfry odĹoĹźone na stos
- mov ah, 2
- wcyfry:
- pop dx
- add dx, 48
- int 21h
- loop wcyfry
- koniec:
- mov ax, 4C00h
- int 21h
- ; wyĹwietlanie komunikatu o bĹÄdzie
- error:
- mov ah, 9
- mov dx, enter1
- int 21h
- mov dx, msge
- int 21h
- jmp koniec
- ; komunikaty
- msg0 db "- Podaj dwie liczby -$"
- msg1 db "Podaj liczbe: $"
- msg2 db "Podaj znak operacji: $"
- msg3 db "Wynik = $"
- msge db "Bledne dane!$"
- enter1 db 10,13,36
- val db 123 ; przechowuje wynik
- liczb db 2 ; ile liczb ma byÄ wczytanych
- i db 0 ; zmienna pomocnicza do monitorowania ile liczb wczytano
- oper db 0 ; wybĂłr operatora
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement