8085 program to divide two 16 bit numbers
Last Updated :
10 Apr, 2023
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.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...