8085 program to find the factorial of a number
Problem – Write an assembly language program for calculating the factorial of a number using 8085 microprocessor.
Example –
Input : 04H
Output : 18H
as 04*03*02*01 = 24 in decimal => 18H
In 8085 microprocessor, no direct instruction exists to multiply two numbers, so multiplication is done by repeated addition as 4×3 is equivalent to 4+4+4 (i.e., 3 times).
Load 04H in D register -> Add 04H 3 times -> D register now contains 0CH -> Add 0CH 2 times -> D register now contains 18H -> Add 18H 1 time -> D register now contains 18H -> Output is 18H
Algorithm –
- Load the data into register B
- To start multiplication set D to 01H
- Jump to step 7
- Decrements B to multiply previous number
- Jump to step 3 till value of B>0
- Take memory pointer to next location and store result
- Load E with contents of B and clear accumulator
- Repeatedly add contents of D to accumulator E times
- Store accumulator content to D
- Go to step 4
Address |
Label |
Mnemonic |
Comment |
2000H |
Data |
|
Data Byte |
2001H |
Result |
|
Result of factorial |
2002H |
|
LXI H, 2000H |
Load data from memory |
2005H |
|
MOV B, M |
Load data to B register |
2006H |
|
MVI D, 01H |
Set D register with 1 |
2008H |
FACTORIAL |
CALL MULTIPLY |
Subroutine call for multiplication |
200BH |
|
DCR B |
Decrement B |
200CH |
|
JNZ FACTORIAL |
Call factorial till B becomes 0 |
200FH |
|
INX H |
Increment memory |
2010H |
|
MOV M, D |
Store result in memory |
2011H |
|
HLT |
Halt |
2100H |
MULTIPLY |
MOV E, B |
Transfer contents of B to C |
2101H |
|
MVI A, 00H |
Clear accumulator to store result |
2103H |
MULTIPLYLOOP |
ADD D |
Add contents of D to A |
2104H |
|
DCR E |
Decrement E |
2105H |
|
JNZ MULTIPLYLOOP |
Repeated addition |
2108H |
|
MOV D, A |
Transfer contents of A to D |
2109H |
|
RET |
Return from subroutine |
Explanation –
- First set register B with data.
- Set register D with data by calling MULTIPLY subroutine one time.
- Decrement B and add D to itself B times by calling MULTIPLY subroutine as 4*3 is equivalent to 4+4+4 (i.e., 3 times).
- Repeat the above step till B reaches 0 and then exit the program.
- The result is obtained in D register which is stored in memory
Last Updated :
07 Sep, 2018
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...