section .data
msg_enter db 10,'Enter two digit Number::'
msg_enter_len equ $-msg_enter
res db 10,'Multiplication of elements is::'
res_len equ $-res
section .bss
num resb 03
num1 resb 01
result resb 04
numascii resb 2
%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 .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
call add_shift_proc
call exit
exit:
mov rax,60
mov rdi,0
syscall
add_shift_proc:
dispmsg msg_enter,msg_enter_len
accept num,3
call packnum
mov [num1],bl
dispmsg msg_enter,msg_enter_len
accept num,3
call packnum
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_16bit_proc
ret
packnum:
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_16bit_proc:
mov rcx,4
mov rdi,result
dup1:
rol bx,4
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,4
ret
No comments:
Post a Comment