-
Notifications
You must be signed in to change notification settings - Fork 2
/
substract2Numbers.asm
167 lines (139 loc) · 2.48 KB
/
substract2Numbers.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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
;Write a program to read, subtract and print two 16 bit numbers.
section .text
global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, query
mov edx, len
int 80h
loop_read1:
mov eax, 3
mov ebx, 0
mov ecx, temp
mov edx, 1
int 80h
cmp byte[temp], 10
je loop_read2
cmp byte[temp], 32
je loop_read2
mov ax, word[num1]
mov bx, 10
mul bx
mov bl, byte[temp]
sub bl, 30h
mov bh, 0
add ax, bx
mov word[num1], ax
jmp loop_read1
loop_read2:
mov eax, 3
mov ebx, 0
mov ecx, temp
mov edx, 1
int 80h
cmp byte[temp], 10
je prog
cmp byte[temp], 32
je prog
mov ax, word[num2]
mov bx, 10
mul bx
mov bl, byte[temp]
sub bl, 30h
mov bh, 0
add ax, bx
mov word[num2], ax
jmp loop_read2
prog:
mov ax, word[num2]
cmp word[num1], ax
je printz
cmp word[num1], ax
jb sub1
mov ax, word[num2]
sub word[num1], ax
extract:
cmp word[num1], 0
je print
inc byte[node]
mov dx, 0
mov ax, word[num1]
mov bx, 10
div bx
push dx
mov word[num1], ax
jmp extract
print:
cmp byte[node], 0
je exit
dec byte[node]
pop dx
mov byte[temp], dl
add byte[temp], 30h
mov eax, 4
mov ebx, 1
mov ecx, temp
mov edx, 1
int 80h
jmp print
sub1:
mov ax, word[num1]
sub word[num2], ax
extract1:
cmp word[num2], 0
je printm
inc byte[node]
mov dx, 0
mov ax, word[num2]
mov bx, 10
div bx
push dx
mov word[num2], ax
jmp extract1
printm:
mov eax, 4
mov ebx, 1
mov ecx, minus
mov edx, 1
int 80h
print1:
cmp byte[node], 0
je exit
dec byte[node]
pop dx
mov byte[temp], dl
add byte[temp], 30h
mov eax, 4
mov ebx, 1
mov ecx, temp
mov edx, 1
int 80h
jmp print1
printz:
mov eax, 4
mov ebx, 1
mov ecx, zer
mov edx, 1
int 80h
exit:
mov eax, 4
mov ebx, 1
mov ecx, newline
mov edx, 1
int 80h
mov eax, 1
mov ebx, 0
int 80h
section .bss
num1: resw 1
num2: resw 1
rev: resw 1
temp: resb 1
node: resb 1
section .data
query db 'Enter 2 16-bit numbers: ',10
len equ $-query
minus db '-'
zer db '0'
newline db 10