8085 program to divide two 16 bit numbers
Problem – Write an assembly language program in 8085 microprocessor to divide 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) = 00H (2052H) = 02H (2053H) = 00H OUTPUT: (2054H) = 02H (2055H) = 00H (2056H) = FEH (2057H) = FFH
Hence we have divided two 16 bit numbers.
- 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.
|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|
|200C||MOV L, A||L<-A|
|200D||MOV A, H||A<-H|
|200F||MOV H, A||H<-A|
|2010||JC 2017||JUMP WHEN CARRY|
|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|
- 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.
- 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.
- 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.
My Personal Notes arrow_drop_up
Please Login to comment...