8086汇编 执行div指令为什么cs的值会发生变化?

请大佬们看图
ax 是12666
bl 是10
是没有溢出的,ah不是存储余数吗

CPU 执行除法指令(如:DIV  CX、DIV  BL)时,是有可能溢出的。

如果被除数较大,或除数较小,都可能使“商”超出预定位数,此时,就会溢出。

特别是当除数为零时,必然会出现:Divide  overflow。

直接使用 DIV 指令,有一定的风险,一不小心就溢出了。

特别是数字不明确的时候。

因此,在执行 DIV 指令之前,应该加以判断,以免发生溢出。

一般来说,当被除数的高位,小于除数时,就不会发生“溢出”。

如果高位为零,即 DX = 0 或 AH = 0,这就肯定不会溢出。

-----------------------

较好的方法是:编写一个“不会溢出”的除法程序。

方法思路如下:

左图是 CPU 执行 16 位数除以 8 位数时的操作。

在右图中,

被除数:1A 2B 3C 4DH,有 32 位数。

除数是:BL,仅有 8 位数。

商,是:32 位数。

按照图中的步骤,需要执行四次 DIV  BL。

只要 BL 不为零,就绝对不会发生溢出。

按此思路,被除数的字节数,可以继续增加,仅受制于内存的大小。

这就是说:被除数,可以认为是无限的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-28

我也是服了,,书上没说要用不溢出的除法啊,真的是晕了,还不报错

第2个回答  2022-05-18
AX=317A DIV BL=A 商是 4F2 超过 255, 就是发生溢出了
相似回答