-
Notifications
You must be signed in to change notification settings - Fork 0
/
ZAD4.asm
119 lines (100 loc) · 1.96 KB
/
ZAD4.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
org 100h ;PRZESUNIECIE
;Program pobiera dwa znaki (zakladamy ze uzytownik podaje tylko cyfry)
;przesuwa podane wartosci o 48 zapisuje do zmiennych (a i b)
;nastepnie wykonuje kolejno dzielenie, mnozenie, odejmowanie i dodawanie
;wrzucajac wyniki na stos (a pomiedzy wyniki spacje)
;nastepnie wypisuje wartosci stosu na ekran w petli
;-----------------------------------------------------
xor dx,dx
call Enter
call Pobieranie
call Dzielenie
call Spacja
call Mnozenie
call Spacja
call Odejmowanie
call Spacja
call Dodawanie
call Enter
;----------------------------------------------------------------------
mov ah,2
xor si,si
petla: ;petla wypisujaca wartosci ze stosu
pop dx
int 21h
inc si
cmp si,7
jne petla
;----------------------------------------------------------------------
mov ax,4C00h ;KONIEC PROGRAMU
int 21h
a db 0
b db 0
Pobieranie:
mov ah,1
int 21h ;pobieram znak z klawiatury do al
sub al,48
mov [a],al ; po przesunieciu zapisuje znak do [a]
mov ah,2
mov dl,44 ;rozdzielam cyfry przecinkiem
int 21h
mov ah,1
int 21h ; to samo dla [b]
sub al,48
mov [b],al
call Enter
ret
Enter:
mov ah,2
mov dl,10 ;enter1
int 21h
mov ah,2
mov dl,13 ;enter2
int 21h
ret
Spacja: ;DODAJE SPACJE DO DL
pop cx
mov dl,32
push dx
push cx
ret
Dodawanie: ;DODAWANIE
pop cx ; w cx zachowuje adres powrotu
mov dl,[a]
add dl,[b]
push dx
push cx ;i wkladam na koniec znowu na stos
ret
Odejmowanie: ;ODEJMOWANIE
pop cx
mov dl,[a]
sub dl,[b]
push dx
push cx
ret
Mnozenie: ;MNOZENIE
pop cx
mov al,[a]
mov ah,[b]
mul ah
mov dl,al
push dx
push cx
ret
Dzielenie: ;DZIELENIE
pop cx
mov bh,[b]
cmp bh,0 ;sprawdzam czy b jest rowne 0
jz bzero ;jesli rowne przechodze do etykiety bzero
mov ax,0
mov al,[a]
mov bh,[b]
div bh
mov dl,al
jmp dalej
bzero:
mov dl,33 ;wykrzyknik
dalej:
push dx
push cx
ret