Home »
Embedded Systems
Divide a 16-bit Number by an 8-bit Number | 8086
In this tutorial, we will learn how to divide a 16-bit number by an 8-bit number in 8086 Microprocessor?
By Ayush Sharma Last updated : May 22, 2023
Problem Statement
Write an assembly language program in 8086 microprocessor to divide a 16 bit number by an 8 bit number.
Algorithm
- Assign value 500 in SI and 600 in DI
- Move the contents of [SI] in BL and increment SI by 1
- Move the contents of [SI] and [SI + 1] in AX
- Use DIV instruction to divide AX by BL
- Move the contents of AX in [DI].
- Stop the program.
Assumption: Initial value of each segment register is 00000.
Calculation of physical memory address: Memory Address = Segment Register * 10(H) + offset,
8086 program to divide a 16-bit number by an 8-bit number
ADDRESS | MNEMONICS | COMMENTS |
0400 | MOV SI, 500 | SI <- 500 |
0403 | MOV DI, 600 | DI <- 600 |
0406 | MOV BL, [SI] | BL <- [SI] |
0408 | INC SI | SI <- SI + 1 |
0409 | MOV AX, [SI] | AX <- [SI] |
040B | DIV BL | AX <- AX / BL |
040D | MOV [DI], AX | [DI] <- AX |
040F | HLT | End of program |
Explanation
Registers used AX, BL, SI, DI
- MOV SI, 500 assigns 500 to SI
- MOV DI, 600 assigns 600 to DI
- MOV BL, [SI] moves the content of [SI] to BL register i.e. value of divisor will be stored in BL
- INC SI increment the content of SI by 1
- MOV AX, [SI] moves the content of [SI] and [SI + 1] to AX register i.e. value of dividend will be stored in AX
- DIV BL divide the content of AX by BL, after execution of this instruction the quotient get stored in AL and remainder in AH
- MOV [DI], AX moves the content of AX to [DI]
- HLT stops executing the program and halts any further execution