当前位置: 代码迷 >> 汇编语言 >> 关于imul的32位乘法有关问题
  详细解决方案

关于imul的32位乘法有关问题

热度:8829   发布时间:2013-02-26 00:00:00.0
关于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
------其他解决方案--------------------------------------------------------
引用:
imul ebx 是 edx:eax/ebx 不仅仅是 eax/ebx ,所以,如果只是 eax/ebx 的话,edx 应被置 0


我前边已经将edx置0,不过没贴这行代码出来
------其他解决方案--------------------------------------------------------
引用:
是你自己的问题,不是处理器的问题。人家明明是64位的数,你为什么要分开。


它结果应该是存在edx:eax吧?那怎样把这64位的数读出来?
------其他解决方案--------------------------------------------------------
它在EDX:EAX中呆得好好的,还读做么。不知道你到底要做甚麽。

你是要显示出来么?

不停地除以10好了,用IDIV指令,EDX:EAX / 10。
------其他解决方案--------------------------------------------------------
引用:
它在EDX:EAX中呆得好好的,还读做么。不知道你到底要做甚麽。

你是要显示出来么?

不停地除以10好了,用IDIV指令,EDX:EAX / 10。


我本来是用C和汇编混合编的一个东西...
主程序是C,子程序是用汇编实现的...
想要把EDX:EAX这个64位的结果返回到C的一个64位的变量里边...
那该怎么实现?
不断除以十?是两个都同时都除以十,一个个数弄出来放到数组里?
------其他解决方案--------------------------------------------------------
DIV r/m32    ;EDX:EAX÷r/m32