汇编div 溢出 如何解决

来源:百度知道 编辑:UC知道 时间:2024/06/20 13:49:27
被除数是10 00 00 00 (十六进制)
除数 是 1 00 (十六进制)
经自己计算可得:
商 是 10 00 00(十六进制,占三个字节,肯定溢出啊)
余数 是 0
这种情况情况 如何用div计算呢
1.对于:“把除数扩大100H倍,即把除数改为10000H。div之后再把商数乘以100H。想不出更好的办法。” 如果除数是100h是不是得不到正解的余数?
2.对于“浮点计算” 我下了那个rar,看到了fld指令,但好像这个指令在8086指令集找不到,那对这些机器又该如何处理呢?

何必一棵树上吊死,直接用浮点指令做不就完了
和浮点计算有关的资料:
http://cid-420bf8c460422d7b.skydrive.live.com/self.aspx/TEMP/Float.rar
浮点指令里有好几种除法指令

浮点指令是由协处理器来运算的,现在几乎所有的CPU都在CPU内部集成了协处理器,不信的话你可以下载一个CPU-Z(一个免费软件)来看一看自己的CPU所支持的浮点指令,一般的CPU都会支持好几套浮点指令,我的可耻的奔4 CPU都支持3套浮点指令呢
另外楼主你干嘛要看浮点指令在不在8086的指令集里啊?难不成你要兼容8086机?如果楼主真想兼容8086机的话,我可以明确的告诉楼主,现在已经基本找不到8086机了 - - ,估计那玩意只能在博物馆里看到了

对了,如果要用那些浮点指令的话,要在程序的最前面加上".386"
唉,关于浮点指令还真有点复杂,我能力有限,三言两语还真说不清,楼主自己摸索吧

把除数扩大100H倍,即把除数改为10000H。div之后再把商数乘以100H。

想不出更好的办法。

扩展ax
在8086中的cwd是扩展ax的指令~扩展后寄存器为dx:ax 相当于32位寄存器
除数用 16位寄存器~运算结果商在ax中 余数在dx中