汇编中如何实现除法的(不直接用div指令)?

来源:百度知道 编辑:UC知道 时间:2024/06/22 02:29:23
貌似是使用一个大整数与一个数相乘,然后取高32位,然后......能讲解一下吗,谢谢!
对不起,我的问题提错了。是问两个int型的数相乘,二进制表示结果应该是64位,(汇编中用%edx存高32位,%eax存低32位),那么这个高32位二进制的数所表示的是什么呢?非常感谢!
(比如,0x666666678*x,则此时%edx中的数表示的数与x有什么数学联系)

这个很好理解。
计算机内的乘法规则:
被乘数和乘数都为n位二进制数,则乘积的位数为2n位。
如果n=32,则乘积高32位存入edx,乘积的低32位存入EAX

类似于两个两位的十进制数相乘,乘积最大是一个四位的十进制数。

你可以这样理解:如果2个8位数相乘:AL*CL,其结果为16位数,低8位放在AL,高8位放在AH,但在16位处理器中,这两个寄存器又可用AX表示这个结果,所以能好理解.但在32位处理器中,需要用2个寄存器来保存一个64位数,即用edx和eax来保存一个64位数.虽然不能用一个64位寄存器来表示它,但在做除法时即可隐含该64位数,例:
div ecx
就是EDX和EAX所表示的64位数除以ECX.

如果用10进制来计算该64位数,则为:
EDX*(0FFFFFFFFH+1)+EAX