关于imul的32位乘法有关问题
关于imul的32位乘法问题本帖最后由 kcs07 于 2012-12-05 08:52:04 编辑关于汇编的imul,结果理论上来说,高3
关于imul的32位乘法问题
本帖最后由 kcs07 于 2012-12-05 08:52:04 编辑 关于汇编的imul,结果理论上来说,高32位应该存在edx,低32位存在eax,但是结果和预期的不一样..
请问imul对32位乘法的原理是怎样的?
如何解读这样的结果?
mov eax,90000
mov ebx,90000
imul ebx
WriteUDecDword eax
call dispcrlf
WriteUDecDword edx
这段代码结果:
3805032704
1
[最优解释]是你自己的问题,不是处理器的问题。人家明明是64位的数,你为什么要分开。
[其他解释]imul ebx 是 edx:eax/ebx 不仅仅是 eax/ebx ,所以,如果只是 eax/ebx 的话,edx 应被置 0
[其他解释]我前边已经将edx置0,不过没贴这行代码出来
[其他解释]它结果应该是存在edx:eax吧?那怎样把这64位的数读出来?
[其他解释]它在EDX:EAX中呆得好好的,还读做么。不知道你到底要做甚麽。
你是要显示出来么?
不停地除以10好了,用IDIV指令,EDX:EAX / 10。
[其他解释]我本来是用C和汇编混合编的一个东西...
主程序是C,子程序是用汇编实现的...
想要把EDX:EAX这个64位的结果返回到C的一个64位的变量里边...
那该怎么实现?
不断除以十?是两个都同时都除以十,一个个数弄出来放到数组里?
[其他解释]DIV r/m32 ;EDX:EAX÷r/m32