您好。我目前正在使用MASM32,并且遇到了麻烦。我阅读了文档,但没有理由说明它不起作用。
mov eax, input("X coordinate: ")
mov ebx, input("Y coordinate: ")
imul ebx, eax
mov x, ebx
print x
它应该将ebx
和eax
的内容相乘,并将结果存储在ebx
中,但事实并非如此。假设您输入3和6 - 所有它打印是6。
答案 0 :(得分:0)
根据英特尔文档,当两个32位寄存器相乘时,结果存储在寄存器组合edx:eax
中,代表64位产品。出于兼容性原因,即使在x86-64处理器中也是如此,因为在创建期间,英特尔处理器仅支持32位。
首先,在您的代码中,您正在打印ebx
而不是eax
,即使您不了解英特尔纪录片,这也是您的预期。这就是你的代码只打印6的原因,因为6是ebx
中的被乘数。但是,要获得正确答案,您仍然只能打印edx:eax
。
因此,要解决此问题,您必须将乘数和被乘数的大小缩短为16位(推荐方式),或者找到打印整个edx:eax
的方法(根据库可能会很难实现)进口)。
希望这有帮助。