问题–在8086微处理器中编写汇编语言程序,将16位数字除以8位数字。
例子 –
算法 –
- 在SI中分配值500在DI中分配值600
- 移动BL中[SI]的内容并将SI递增1
- 在AX中移动[SI]和[SI + 1]的内容
- 使用DIV指令将AX除以BL
- 在[DI]中移动AX的内容。
- 停止程序。
假设–每个段寄存器的初始值为00000。
物理内存地址的计算–
内存地址=段寄存器* 10(H)+偏移量
其中段寄存器和偏移量是根据下表确定的。
OPERATIONS | SEGMENT REGISTER | OFFSET |
---|---|---|
Instruction fetching | Code Segment | Instruction Pointer |
Data operation | Data Segment | Base Register [BX], Displacement [DISP] |
Stack operation | Stack Segment | Stack Pointer (SP), Base Pointer (BP) |
String as a source | Data Segment | Source Indexed (SI) |
String as a destination | Extra Segment | Destination Indexed (DI) |
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|
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 |
说明–使用的寄存器AX,BL,SI,DI
- MOV SI,500将500分配给SI
- MOV DI,600将600分配给DI
- MOV BL,[SI]将[SI]的内容移至BL寄存器,即除数的值将存储在BL中
- INC SI将SI的内容增加1
- MOV AX,[SI]将[SI]和[SI + 1]的内容移至AX寄存器,即,股息值将存储在AX中
- DIV BL将AX的内容除以BL,执行此指令后,商将存储在AL中,余数存储在AH中
- MOV [DI],AX将AX的内容移至[DI]
- HLT停止执行程序,并停止任何进一步的执行