Home »
Embedded Systems
Multiply Two 16-bit Numbers in 8085 Microprocessor
In this tutorial, we will learn how to find the multiplication of two 16-bit numbers in 8085 Microprocessor?
By Ayush Sharma Last updated : May 13, 2023
8085 Program to Multiply Two 16-bit Numbers
Given two 16-bit numbers, we have to find their multiplication in 8085 Microprocessor.
Assumption
- Starting address of program: 2000
- Input memory location: 2050, 2051, 2052, 2053
- Output memory location: 2054, 2055, 2056, 2057
Algorithm
- Load the first data in HL pair.
- Move content of HL pair to stack pointer.
- Load the second data in HL pair and move it to DE.
- Make H register as 00H and L register as 00H.
- ADD HL pair and stack pointer.
- Check for carry if carry increment it by 1 else move to next step.
- Then move E to A and perform OR operation with accumulator and register D.
- The value of operation is zero, then store the value else goto step 3.
Program
ADDRESS | MNEMONICS | COMMENTS |
2000 | LHLD 2050 | Load H-L pair with address 2050 |
2003 | SPHL | SAVE IT IN STACK POINTER |
2004 | LHLD 2052 | Load H-L pair with address 2052 |
2007 | XCHG | EXCHANGE HL AND DE PAIR CONTENT |
2008 | LXI H,0000H | H<-00H,L<-00H |
200B | LXI B,0000H | B<-00H,C<-00H |
200E | DAD SP | |
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 | ENDS THE PROGRAM |
Explanation
Registers B, C, D, E, H, L and accumulator are used for general purpose.
- LHLD 2050: load HL pair with address 2050.
- SPHL: save the content of HL in stack pointer.
- LHLD 2052: load H-L pair with address 2052.
- XCHG: exchange the content of HL pair with DE.
- LXI H, 0000H: make H as 00H and L as 00H.
- LXI B, 0000H: make B as 00h and C as 00H.
- DAD SP: ADD HL pair and stack pointer.
- JNC 2013: jump to address 2013 if there will be no carry.
- INX B: increments BC register with 1.
- DCX D: decrements DE register pair by 1.
- MOV A, E: move the content of register E to accumulator.
- ORA D: or the content of accumulator and D register.
- JNZ 200E: jump to address 200E if there will be no zero.
- SHLD 2054: store the result to memory address 2054 and 2055 from HL pair register.
- MOV L, C: move the content of register C to L.
- MOV H, B: move the content of register B to H.
- SHLD 2056: store the result to memory address 2056 and 2057 from HL pair register.
- HLT: terminates the program.