-
Notifications
You must be signed in to change notification settings - Fork 0
/
ex3.asm
243 lines (205 loc) · 3.21 KB
/
ex3.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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
global main
extern printf
extern atoi
section .text
main:
;Prompt1
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, msg1len
int 0x80
;END
;Prompt2
mov eax, 4
mov ebx, 1
mov ecx, msg2
mov edx, msg2len
int 0x80
;END
;Get Op Type
mov eax, 3
mov ebx, 0
mov ecx, optype
mov edx, 5
int 0x80
;END
;Prompt3
mov eax, 4
mov ebx, 1
mov ecx, msg3
mov edx, msg3len
int 0x80
;END
;Get First Num
mov eax, 3
mov ebx, 0
mov ecx, num1
mov edx, 5
int 0x80
;END
;Prompt3
mov eax, 4
mov ebx, 1
mov ecx, msg4
mov edx, msg4len
int 0x80
;END
;Get Second Num
mov eax, 3
mov ebx, 0
mov ecx, num2
mov edx, 5
int 0x80
;END
;Convert OPTYPE to INT
mov eax, 0
mov eax, optype
push eax
call atoi
add esp, 4
;Compare and jump equal
cmp eax,1
je SumFunc
cmp eax,2
je SubFunc
cmp eax,3
je MultFunc
cmp eax,4
je DivFunc
;EXIT
mov eax, 1
mov ebx, 0
int 0x80
getNum1:
mov eax, 3
mov ebx, 0
mov ecx, num1
mov edx, 5
int 0x80
ret
SumFunc:
;Convert num1 to int (store in num2int)
mov eax, 0
mov eax, num1
push eax
call atoi
add esp, 4
mov dword [num2int],eax
;Convert num2 to int and add num1+num2
mov eax, 0
mov eax, num2
push eax
call atoi
add esp, 4
add dword[num2int], eax
;Push num2int to stack and call printf
push dword[num2int]
push msgres
call printf
add esp, 8
;End program with code 0
mov eax, 1
mov ebx, 0
int 0x80
SubFunc:
;Convert num1 to int (store in num2int)
mov eax, 0
mov eax, num1
push eax
call atoi
add esp, 4
mov dword [num2int],eax
;Convert num2 to int and subtract num1-num2
mov eax, 0
mov eax, num2
push eax
call atoi
add esp, 4
sub dword[num2int], eax
;Push num2int to stack and call printf
push dword[num2int]
push msgres
call printf
add esp, 8
;End program with code 0
mov eax, 1
mov ebx, 0
int 0x80
MultFunc:
;Convert num1 to int (store in num2int)
mov eax, 0
mov eax, num1
push eax
call atoi
add esp, 4
mov dword [num2int],eax
;Convert num2 to int and multiple num1xnum2
mov eax, 0
mov eax, num2
push eax
call atoi
add esp, 4
mul dword[num2int]
;Push num2int to stack and call printf
push eax
push msgres
call printf
add esp, 8
;End program with code 0
mov eax, 1
mov ebx, 0
int 0x80
DivFunc:
;Convert num1 to int (store in num2int)
mov eax, 0
mov eax, num1
push eax
call atoi
add esp, 4
mov dword [num2int],eax
;Convert num2 to int and divide num1/num2
mov eax, 0
mov eax, num2
push eax
call atoi
add esp, 4
;Dividing
mov edx, 0
mov ecx,eax
mov eax,dword[num2int]
div ecx
mov dword[rem],edx
;Push num2int to stack and call printf
push eax
push msgres
call printf
add esp, 8
;Get Remainder
push dword[rem]
push remtxt
call printf
add esp, 8
;End program with code 0
mov eax, 1
mov ebx, 0
int 0x80
section .data
msg1 db "Select the operation type.",10
msg1len equ $-msg1
msg2 db "1-Sum 2-Sub 3-Mult 4-Div",10
msg2len equ $-msg2
msg3 db "Enter the first number",10
msg3len equ $-msg3
msg4 db "Enter the second number",10
msg4len equ $-msg4
remtxt db "Remainder:%i",10,0
remtxtlen equ $-remtxt
msgres db "Result:%i",10,0
msgreslen equ $-msgres
section .bss
optype resb 5
num1 resb 5
num2 resb 5
num2int resb 5
rem resb 5