Problem – Write an assembly language program in 8085 microprocessor to multiply two 16 bit numbers.
- Starting address of program: 2000
- Input memory location: 2050, 2051, 2052, 2053
- Output memory location: 2054, 2055, 2056, 2057
INPUT: (2050H) = 04H (2051H) = 07H (2052H) = 02H (2053H) = 01H OUTPUT: (2054H) = 08H (2055H) = 12H (2056H) = 01H (2057H) = O0H
Hence we have multiplied two 16 bit numbers.
- 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.
|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|
|200F||JNC 2013||JUMP NOT CARRY|
|2012||INX B||INCREMENT BC BY 1|
|2013||DCX D||DECREMENT DE BY 1|
|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.
- 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.
- 8085 program to multiply two 8 bit numbers
- 8085 program to multiply two 8 bit numbers using logical instructions
- 8085 program to count total odd numbers in series of 10 numbers
- 8085 program to count total even numbers in series of 10 numbers
- 8086 program to multiply two 16-bit numbers
- 8086 program to multiply two 8 bit numbers
- 8085 program to add 2-BCD numbers
- 8085 program to add two 8 bit numbers
- 8085 program to add two 16 bit numbers
- 8085 program to add numbers in an array
- 8085 program to divide two 8 bit numbers
- 8085 program to divide two 16 bit numbers
- 8085 program to swap two 8-bit numbers
- 8085 program to sum of two 8 bit numbers without carry
- 8085 program to find larger of two 8 bit numbers
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.