# 8085 program to multiply two 16-bit numbers

Problem – Write an assembly language program in 8085 microprocessor to multiply two 16 bit numbers.

Assumption –

• Starting address of program: 2000
• Input memory location: 2050, 2051, 2052, 2053
• Output memory location: 2054, 2055, 2056, 2057

Example –

```INPUT:
(2050H) = 04H
(2051H) = 07H
(2052H) = 02H
(2053H) = 01H
OUTPUT:
(2054H) = 08H
(2055H) = 12H
(2056H) = 01H
(2057H) = O0H```

RESULT:
Hence we have multiplied two 16 bit numbers.

Algorithm –

1. Load the first data in HL pair.
2. Move content of HL pair to stack pointer.
3. Load the second data in HL pair and move it to DE.
4. Make H register as 00H and L register as 00H.
5. ADD HL pair and stack pointer.
6. Check for carry if carry increment it by 1 else move to next step.
7. Then move E to A and perform OR operation with accumulator and register D.
8. The value of operation is zero, then store the value else goto step 3.

Program –

2003 SPHL SAVE IT IN STACK POINTER
2007 XCHG EXCHANGE HL AND DE PAIR CONTENT
2008 LXI H,0000H H<-00H,L<-00H
200B LXI B,0000H B<-00H,C<-00H
200F JNC 2013 JUMP NOT CARRY
2012 INX B INCREMENT BC BY 1
2013 DCX D DECREMENT DE BY 1
2014 MOV A,E A<-E
2015 ORA D OR THE CONTENT OF ACCUMULATOR AND D REGISTER
2016 JNZ 200E JUMP NOT ZERO
2019 SHLD 2054 L<-2053,H<-2054
201C MOV L,C L<-C
201D MOV H,B B<H
201E SHLD 2056 L<-2055,H<-2056
2021 HLT TERMINATES THE PROGRAM

Explanation – Registers B, C, D, E, H, L and accumulator are used for general purpose.

2. SPHL: save the content of HL in stack pointer.
4. XCHG: exchange the content of HL pair with DE.
5. LXI H, 0000H: make H as 00H and L as 00H.
6. LXI B, 0000H: make B as 00h and C as 00H
9. INX B: increments BC register with 1.
10. DCX D: decrements DE register pair by 1.
11. MOV A, E: move the content of register E to accumulator.
12. ORA D: or the content of accumulator and D register.
14. SHLD 2054: store the result to memory address 2054 and 2055 from HL pair register.
15. MOV L, C: move the content of register C to L.
16. MOV H, B: move the content of register B to H.
17. SHLD 2056: store the result to memory address 2056 and 2057 from HL pair register.
18. HLT: terminates the program.