Assignment_7
section .data
arr dq 000000000000004h,0000000000000003h
n equ 2
menu db 10d,13d,"MENU"
db 10d,13d,"1. Addition"
db 10d,13d,"2. Subtraction"
db 10d,13d,"3. Multiplication"
db 10d,13d,"4. Division"
db 10d,13d,"5. Exit"
db 10d,13d,"Enter your Choice: "
menu_len equ -m1
m2 db 10d,13d,"Substraction: "
l2 equ -m3
m4 db 10d,13d,"Division: "
l4 equ $-m4
%macro scall 4
mov rax,%1
mov rdi,%2
mov rsi,%3
mov rdx,%4
syscall
%endmacro
section .bss
answer resb 16 ;to store the result of operation
choice resb 2
section .text
global _start:
_start:
up: scall 1,1,menu,menu_len
scall 0,0,choice,2
cmp byte[choice],"1"
je case1
cmp byte[choice],"2"
je case2
cmp byte[choice],"3"
je case3
cmp byte[choice],"4"
je case4
cmp byte[choice],"5"
je case5
case1:
scall 1,1,m1,l1
call addition
jmp up
case2:
scall 1,1,m2,l2
call substraction
jmp up
case3:
scall 1,1,m3,l3
call multiplication
jmp up
case4:
scall 1,1,m4,l4
call division
jmp up
case5:
mov rax,60
mov rdi,0
syscall
;procedures for arithmetic and logical operations
addition:
mov rcx,n
dec rcx
mov rsi,arr
mov rax,[rsi]
up1:
add rsi,8
mov rbx,[rsi]
add rax,rbx
loop up1
call display
ret
substraction:
mov rcx,n
dec rcx
mov rsi,arr
mov rax,[rsi]
up2:
add rsi,8
mov rbx,[rsi]
sub rax,rbx
loop up2
call display
ret
multiplication:
mov rcx,n
dec rcx
mov rsi,arr
mov rax,[rsi]
up3:
add rsi,8
mov rbx,[rsi]
mul rbx
loop up3
call display
ret
division:
mov rcx,n
dec rcx
mov rsi,arr
mov rax,[rsi]
up4:
add rsi,8
mov rbx,[rsi]
mov rdx,0
div rbx
loop up4
call display
ret
display:
mov rsi,answer+15
mov rcx,16
cnt:
mov rdx,0
mov rbx,16
div rbx
cmp dl,09h
jbe add30
add dl,07h
add30:
add dl,30h
mov [rsi],dl
dec rsi
dec rcx
jnz cnt
scall 1,1,answer,16
ret