0% found this document useful (0 votes)
25 views3 pages

Exp 12

This document contains an assembly language program that calculates the factorial of a user-input number. It includes macros for system calls, procedures for converting ASCII to hexadecimal, and a recursive function for computing the factorial. The program also handles user input and displays the result in a formatted manner.

Uploaded by

Sadiya Sayed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
25 views3 pages

Exp 12

This document contains an assembly language program that calculates the factorial of a user-input number. It includes macros for system calls, procedures for converting ASCII to hexadecimal, and a recursive function for computing the factorial. The program also handles user input and displays the result in a formatted manner.

Uploaded by

Sadiya Sayed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

%macro scall 4;

common macro for input/output


mov rax, %1

mov
rdi,%2
mov
rsi,%3
mov
rdx,%4
syscall

%end macro

section
.data
num db
00h

msg db"Factorial is:"


msglen equ $-msg

msg1 db "*****Program to find factorial of a number*****",0AH db "Enter the


number:",
msg1len equ $-msg1

zerofact db "00000001"
zerofactlen equ $-zerofact

section .bss
dispnum resb 16
result resb 4
temp resb 3

section
.text
global
_start
_start:
scall 1,1,msg1,msg1len
scall 0,0,temp,3;
accept number from user
call convert;
convert number from ascii to hex mov
[num],dl

scall 1,1,msg.
mov al,[num];
store number in accumulator cmp al,01h
jbe endfact
mov rbx,0;
RMD mov bl,01h
call factr;
call factorial procedure call display

call exit endfact:


scall 1,1,zerofact,zerofactlen call exit

factr:
;recursive procedure cmp rax,01h
je recton1 push rax dec rax

call factr retcon:


pop rbx
mul ebx jmp endpr

retcon1; if rax=1 return pop rbx


jmp retcon endpr:
ret
display: ;procedure to convert hex to acci

mov
rsi,dispnum+15
mov rcx,0
;R
MD mov cl,16
cont:
mov rdx,0; RMD
mov rbx,0
;
RMD mov
bl,10h
div ebx
cmp
dl,09h
jbe
skip
add
dl,07h
skip:
add
dl,30h
mov
[rsi],dl
dec rsi
loop count

scall
1,1,dispnum,16

ret

convert: ;procedure to convery ascii to hex


mov rsi,temp
mov cl.02h
MOV rax,0 ;RMD
mov rdx,0
;

RMD countc:
rol
dl,04h
mov
al,[rsi]
cmp
al,39h
jbe
skipc
sub
al,07h
skipc:
sub
al,30 h
add
dl,al
inc rsi
dec cl knz cont ret

exit:
;exit system call

mov
rax,60
mov
rdi,0
syscall
ret

You might also like