📌  相关文章
📜  8086程序将16位数字除以8位数字

📅  最后修改于: 2021-06-28 09:20:28             🧑  作者: Mango

问题–在8086微处理器中编写汇编语言程序,将16位数字除以8位数字。

例子 –
16位数字除以8位数字

算法 –

  1. 在SI中分配值500在DI中分配值600
  2. 移动BL中[SI]的内容并将SI递增1
  3. 在AX中移动[SI]和[SI + 1]的内容
  4. 使用DIV指令将AX除以BL
  5. 在[DI]中移动AX的内容。
  6. 停止程序。

假设–每个段寄存器的初始值为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

  1. MOV SI,500将500分配给SI
  2. MOV DI,600将600分配给DI
  3. MOV BL,[SI]将[SI]的内容移至BL寄存器,即除数的值将存储在BL中
  4. INC SI将SI的内容增加1
  5. MOV AX,[SI]将[SI]和[SI + 1]的内容移至AX寄存器,即,股息值将存储在AX中
  6. DIV BL将AX的内容除以BL,执行此指令后,商将存储在AL中,余数存储在AH中
  7. MOV [DI],AX将AX的内容移至[DI]
  8. HLT停止执行程序,并停止任何进一步的执行