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) = 07H (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.
MEMORY 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<-2054,H<-2055 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.
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.