;A menu driven ALP to perform 8 bit Multiplicattion using Succesive Addition and Add and shift method
%macro dispmsg 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro accept 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
section .data
msg db 10,'Enter two digit number::'
msg_len equ $-msg
res db 10,'Multiplication of elements is::'
res_len equ $-res
choice db 10,13,'Enter your choice:'
db 10,13,'1.Successive Addition'
db 10,13,'2.Add and Shift method'
db 10,13,'3.Exit'
db 10,13,''
choice_len equ $-choice
section .bss
num resb 03
num1 resb 01
result resb 04
cho resb 2
section .text
global _start
_start:
xor rax,rax
xor rbx,rbx
xor rcx,rcx
xor rdx,rdx
mov byte[result],0
mov byte[num],0
mov byte[num1],0
dispmsg choice,choice_len
accept cho,2
cmp byte[cho],31h
je a
cmp byte[cho],32h
je b
jmp exit
a:call Succe_addition
jmp _start
b:call Add_shift
jmp _start
exit:
mov rax,60
mov rdi,0
syscall
convert:
xor rbx,rbx
xor rcx,rcx
xor rax,rax
mov rcx,02
mov rsi,num
up1:
rol bl,04
mov al,[rsi]
cmp al,39h
jg p1
sub al,30h
jmp p2
p1: sub al,37h
p2:add bl,al
inc rsi
loop up1
ret
display:
mov rcx,04
mov rdi,result
dup1:
rol bx,04
mov al,bl
and al,0fh
cmp al,09h
jg p3
add al,30h
jmp p4
p3: add al,37h
p4:mov [rdi],al
inc rdi
loop dup1
dispmsg result,04
ret
Succe_addition:
dispmsg msg,msg_len
accept num,3
call convert
mov [num1],bl
dispmsg msg,msg_len
accept num,3
call convert
xor rcx,rcx
xor rax,rax
mov rax,[num1]
repet:
add rcx,rax
dec bl
jnz repet
mov [result],rcx
dispmsg res,res_len
mov rbx,[result]
call display
ret
Add_shift:
dispmsg msg,msg_len
accept num,3
call convert
mov [num1],bl
dispmsg msg,msg_len
accept num,3
call convert
mov [num],bl
xor rbx,rbx
xor rcx,rcx
xor rdx,rdx
xor rax,rax
mov dl,08
mov al,[num1]
mov bl,[num]
p11:shr bx,01
jnc p
add cx,ax
p:shl ax,01
dec dl
jnz p11
mov [result],rcx
dispmsg res,res_len
mov rbx,[result]
call display
ret
Blogger Comment
Facebook Comment