Microprocessor/Codes/Practical-5.1 (successive addition).asm
2024-06-10 11:23:57 +05:30

120 lines
1.6 KiB
NASM

; THIS CODE HAS NOT BEEN TESTED AND IS NOT FULLY OPERATIONAL.
; Problem Statement: Write X86/64 ALP to perform multiplication of two 8-bit hexadecimal numbers. Using successive addition method. (Use of 64-bit registers is expected).
; Code from Microprocessor (SPPU - Second Year - Computer Engineering - Content) repository on KSKA Git: https://git.kska.io/sppu-se-comp-content/Microprocessor/
; BEGINNING OF CODE
%macro print 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
m1 db 10,"----- Multiplication using successive addition -----",10,13
l1 equ $-m1
m2 db 10,"Enter the multiplicand",10,13
l2 equ $-m2
m3 db 10,"Enter the multiplier",10,13
l3 equ $-m3
res db 10,"Multiplication of the numbers is::",10,13
rlen equ $-res
section .bss
numascii resb 03
mplier resq 02
mcand resq 02
;result resq 01
dispbuff resb 04
section .txt
global _start:
_start:
print m1,l1
print m2,l2
accept numascii,3
call packnum
mov byte[mcand],bl
print m3,l3
accept numascii,3
call packnum
mov byte[mplier],bl
print res,rlen
mov rax,0
cmp qword[mplier],0
jz ll5
ll1:
add rax,qword[mcand]
dec qword[mplier]
jnz ll1
ll5:
call dispnum
exit:
mov rax,60
mov rbx,00
syscall
dispnum:
mov rbx,rax
mov rcx,04
mov rdi,dispbuff
up2:
rol bx,4
mov al,bl
and al,0fh
cmp al,09
jbe dskip
add al,07h
dskip:
add al,30h
mov [rdi],al
inc rdi
loop up2
print dispbuff,4
ret
packnum:
mov bl,0
mov rcx,2
mov rsi,numascii
up1:
rol bl,04
mov al,[rsi]
cmp al,39h
jbe skip1
sub al,07h
skip1:
sub al,30h
add bl,al
inc rsi
loop up1
ret