据我所知,如果我们使用带有8位数字的div指令,则商是存储在AL中的8位数字,余数也是存储在AH中的8位数字
但是如果将16位数字除以1会怎样?
每当执行以下代码时,我的指令指针都放错了位置。
MOV AX, 9999H
MOV BL, 1
DIV BL
有什么方法可以强制8086在使用AX除法时将AX用作商,对余数使用?
在8086处理器上,您可以在字节大小除法和字大小除法之间进行选择。
byte大小的除法将把AX
中的单词除以您指定的byte大小的操作数。您的示例代码使用这种划分。商进入AL
寄存器,其余部分进入AH
寄存器。
在您的示例中,将9999h除以1得到的商为9999h。此结果太大,无法放入AL
,因此您遇到了#DE除法异常。
word大小的除法将用您指定的word大小的操作数除以DX:AX
中的双字。商进入AX
寄存器,其余部分进入DX
寄存器。
您的示例:
XOR DX, DX
MOV AX, 9999H
MOV BX, 1
DIV BX
这次没有问题,AX
寄存器将保留商9999h,DX
寄存器将保留余数0。