Home »
Embedded Systems
Calculate the factorial of a number | 8086 Microprocessor
In this tutorial, we will learn how to calculate the factorial of a given number using assembly program in 8086 Microprocessor?
By Ayush Sharma Last updated : May 22, 2023
Problem Statement
Write an assembly language program for calculating the factorial of a number using 8086 microprocessor.
Assumptions
- Starting address of program: 0400
- Input memory location: 0500
- Output memory location: 0600 and 0601
Point to be noted:
If the Given Number is a 16-bit number, the AX register is automatically used as the second parameter and the product is stored in the DX:AX register pair. This means that the DX register holds the high part and the AX register holds the low part of a 32-bit number.
Algorithm
- Input the Number whose factorial is to be find and Store that Number in CX Register (Condition for LOOP Instruction)
- Insert 0001 in AX(Condition for MUL Instruction) and 0000 in DX
- Multiply CX with AX until CX become Zero(0) using LOOP Instruction
- Copy the content of AX to memory location 0600
- Copy the content of DX to memory location 0601
- Stop Execution
Program
ADDRESS | MNEMONICS | COMMENTS |
0400 | MOV CX, [0500] | CX ← [0500] |
0404 | MOV AX, 0001 | AX ← 0001 |
0407 | MOV DX, 0000 | DX ← 0000 |
040A | MUL CX | DX:AX ← AX * CX |
040C | LOOP 040A | Go To [040A] till CX->00 |
0410 | MOV [0600], AX | [0600]←AX |
0414 | MOV [0601], DX | [0601]←DX |
0418 | HLT | Stop Execution |
Explanation
- MOV CX, [0500] loads 0500 Memory location content to CX Register
- MOV AX, 0001 loads AX register with 0001
- MOV DX, 0000 loads DX register with 0000
- MUL CX multiply AX with CX and store result in DX:AX pair
- LOOP 040A runs loop till CX not equal to Zero
- MOV [0600], AX store AX register content to memory location 0600
- MOV [0601], DX store DX register content to memory location 0601
- HLT stops the execution of program