Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

8086 program to find the factorial of a number

  • Difficulty Level : Easy
  • Last Updated : 22 May, 2018

Prerequisite – 8085 program to find the factorial of a number
Problem – Write an assembly language program for calculating the factorial of a number using 8086 microprocessor

Examples –

Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.


Input : 04H
Output : 18H
as In Decimal : 4*3*2*1 = 24
   In Hexadecimal : 24 = 18H

Input : 06H
Output : 02D0H
as In Decimal : 6*5*4*3*2*1 = 720
   In Hexadecimal : 720 = 02D0H

Assumptions –
Starting address of program: 0400
Input memory location: 0500
Output memory location: 0600 and 0601

Important –
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.

In 8086 microprocessor, user have direct instruction (MUL) to multiply two numbers, so we don’t have to add Multiplicand by Multiplier times like in 8085

Advantage of 8086 over 8085 (In case of Multiply):

  • Don’t have to write a bulky code as 8086 has a small code
  • Easy to remember
  • Already have multiplication Instruction

Algorithm –

  1. Input the Number whose factorial is to be find and Store that Number in CX Register (Condition for LOOP Instruction)
  2. Insert 0001 in AX(Condition for MUL Instruction) and 0000 in DX
  3. Multiply CX with AX until CX become Zero(0) using LOOP Instruction
  4. Copy the content of AX to memory location 0600
  5. Copy the content of DX to memory location 0601
  6. Stop Execution

Program –

0400MOV CX, [0500]CX <- [0500]
0404MOV AX, 0001AX <- 0001
0407MOV DX, 0000DX <- 0000
040CLOOP 040AGo To [040A] till CX->00
0410MOV [0600], AX[0600]<-AX
0414MOV [0601], DX[0601]<-DX
0418HLTStop Execution

Explanation –

  1. MOV CX, [0500] loads 0500 Memory location content to CX Register
  2. MOV AX, 0001 loads AX register with 0001
  3. MOV DX, 0000 loads DX register with 0000
  4. MUL CX multiply AX with CX and store result in DX:AX pair
  5. LOOP 040A runs loop till CX not equal to Zero
  6. MOV [0600], AX store AX register content to memory location 0600
  7. MOV [0601], DX store DX register content to memory location 0601
  8. HLT stops the execution of program
My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!