MASM32中的乘法问题

时间:2014-05-15 04:52:37

标签: assembly masm masm32

您好。我目前正在使用MASM32,并且遇到了麻烦。我阅读了文档,但没有理由说明它不起作用。

    mov eax, input("X coordinate: ")
    mov ebx, input("Y coordinate: ")
    imul ebx, eax

    mov x, ebx
    print x

它应该将ebxeax的内容相乘,并将结果存储在ebx中,但事实并非如此。假设您输入3和6 - 所有它打印是6。

1 个答案:

答案 0 :(得分:0)

根据英特尔文档,当两个32位寄存器相乘时,结果存储在寄存器组合edx:eax中,代表64位产品。出于兼容性原因,即使在x86-64处理器中也是如此,因为在创建期间,英特尔处理器仅支持32位。

首先,在您的代码中,您正在打印ebx而不是eax,即使您不了解英特尔纪录片,这也是您的预期。这就是你的代码只打印6的原因,因为6是ebx中的被乘数。但是,要获得正确答案,您仍然只能打印edx:eax

因此,要解决此问题,您必须将乘数和被乘数的大小缩短为16位(推荐方式),或者找到打印整个edx:eax的方法(根据库可能会很难实现)进口)。

希望这有帮助。