8085 program to divide two 16 bit numbers
Problem – Write an assembly language program in 8085 microprocessor to divide 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) = 00H (2052H) = 02H (2053H) = 00H OUTPUT: (2054H) = 02H (2055H) = 00H (2056H) = FEH (2057H) = FFH
RESULT:
Hence we have divided two 16 bit numbers.
Algorithm –
- Initialise register BC as 0000H for Quotient.
- Load the divisor in HL pair and save it in DE register pair.
- Load the dividend in HL pair.
- Subtract the content of accumulator with E register.
- Move the content A to C and H to A.
- Subtract with borrow the content of A with D.
- Move the value of accumulator to H.
- If CY=1, goto step 10, otherwise next step.
- Increment register B and jump to step 4.
- ADD both contents of DE and HL.
- Store the remainder in memory.
- Move the content of C to L & B to H.
- Store the quotient in memory.
Program –
MEMORY ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
2000 | LXI B, 0000H | INITIALISE QUOTIENT AS 0000H |
2003 | LHLD 2052H | LOAD THE DIVISOR IN HL |
2006 | XCHG | EXCHANGE HL AND DE |
2007 | LHLD 2050 | LOAD THE DIVIDEND |
200A | MOV A, L | A<-L |
200B | SUB E | A<-A-E |
200C | MOV L, A | L<-A |
200D | MOV A, H | A<-H |
200E | SBB D | A<-A-D |
200F | MOV H, A | H<-A |
2010 | JC 2017 | JUMP WHEN CARRY |
2013 | INX B | B<-B+1 |
2014 | JMP 200B | |
2017 | DAD D | HL<-DE+HL |
2018 | SHLD 2056 | HL IS STORED IN MEMORY |
201B | MOV L, C | L<-C |
201C | MOV H, B | H<-B |
201D | SHLD 2054 | HL IS STORED IN MEMORY |
2020 | HLT | TERMINATES THE PROGRAM |
Explanation –
- LXI B, 0000H: initialise BC register as 0000H.
- LHLD 2052H: load the HL pair with address 2052.
- XCHG: exchange the content of HL pair with DE pair register.
- LHLD 2050: load the HL pair with address 2050.
- MOV A, L: move the content of register L into register A.
- SUB E: subtract the contents of register E with contents of accumulator.
- MOV L, A: move the content of register A into register L.
- MOV A, H: move the content of register H into register A.
- SBB D: subtract the contents of register D with contents of accumulator with carry.
- MOV H, A: move the content of register A into register H.
- JC 2017: jump to address 2017 if there is carry.
- INX B: increment BC register by one.
- JMP 200B: jump to address 200B.
- DAD D: add the contents of DE and HL pair.
- SHLD 2056: stores the content of HL pair into memory address 2056 and 2057.
- MOV L, C: move the content of register C into register L.
- MOV H, B: move the content of register B into register H.
- SHLD 2054: stores the content of HL pair into memory address 2054 and 2055.
- HLT: terminates the execution of program.
Advantages:
- The program is a simple and efficient way to divide two 16-bit numbers using the 8085 microprocessor.
- The program uses only a few instructions and requires minimal memory space, making it easy to implement in a microcontroller.
- The program produces accurate results since it performs a series of repetitive subtractions to calculate the quotient and remainder.
- The program can be easily modified to divide larger or smaller numbers by changing the memory addresses.
Disadvantages:
- The program is computationally intensive and time-consuming since it requires a series of repetitive subtractions to calculate the quotient and remainder.
- The program is not very efficient in terms of memory usage since it requires several registers to store the operands and intermediate results.
- The program is not very scalable since it requires a large number of iterations to divide large numbers, which may cause overflow or underflow conditions.
- The program does not handle divide by zero or other error conditions, which may occur if the divisor is zero or the dividend is smaller than the divisor.
- The program does not provide any error checking or reporting mechanism, which may make it difficult to identify errors or faults in the program.
Please Login to comment...