8086汇编语言DIV指令的问题
80x86 中的除法指令(如:DIV CX、DIV BL)时,是有可能溢出的。
如果被除数较大,或除数较小,都可能使“商”超出预定位数,此时,就会溢出。
特别是当除数为零时,必然会出现:Divide overflow。
直接使用 DIV 指令,有一定的风险,一不小心就溢出了。
特别是数字不明确的时候。
因此,在执行 DIV 指令之前,应该加以判断,以免发生溢出。
一般来说,当被除数的高位,小于除数时,就不会发生“溢出”。
如果高位为零,比如 DX = 0,这就肯定不会溢出。
-----------------------
80x86 的 CPU 最大,只支持 32 位数的除法指令。
那么,被除数较大,非常非常大,该怎么办呢?
有人就寄希望于高档的 CPU 问世。
其实,不用等待。
你就编写一个“不会溢出”的除法程序,就可以解决。
方法思路如下:
左图是 CPU 执行 16 位数除以 8 位数时的操作。
在右图中,
被除数,是四个字节:1A 2B 3C 4DH,有 32 位数。
除数,只有一个字节:BL,仅有 8 位数。
这么大的被除数,这么小的除数!
直接用除法指令来求商,显然是根本就做不到的。
但是,按照图中的步骤,执行四次 DIV BL。
可得四个字节的:商。
只要 BL 不为零,这就绝对不会发生溢出。
实际上,被除数的字节数,还可以继续增加。
那么,按此思路,被除数,可以认为是无限的。
好聪明啊,多谢