将16位数字除以8位1会发生什么?

问题描述 投票:1回答:1

据我所知,如果我们使用带有8位数字的div指令,则商是存储在AL中的8位数字,余数也是存储在AH中的8位数字

但是如果将16位数字除以1会怎样?

每当执行以下代码时,我的指令指针都放错了位置。

MOV AX, 9999H
MOV BL, 1
DIV BL

有什么方法可以强制8086在使用AX除法时将AX用作商,对余数使用?

assembly x86-16 tasm integer-division
1个回答
1
投票

在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。

© www.soinside.com 2019 - 2024. All rights reserved.