【问题标题】:Multiplication Problems in MASM32MASM32 中的乘法问题
【发布时间】:2014-05-15 04:52:36
【问题描述】:

嗨。我目前正在使用 MASM32 并且在乘法时遇到了一些麻烦。我阅读了文档,但它为什么不起作用是没有意义的。

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

    mov x, ebx
    print x

它应该将ebxeax 的内容相乘并将结果存储在ebx 中,但它没有。假设你输入了一个 3 和一个 6─它打印的只是 6。

【问题讨论】:

  • 你检查过this question吗?
  • @iTech 该问题与mul 有关。这个问题与imul有关。

标签: assembly masm masm32


【解决方案1】:

根据 Intel 文档,当两个 32 位寄存器相乘时,结果存储在寄存器组合edx:eax 中,代表 64 位乘积。这甚至在 x86-64 处理器中实现,出于兼容性原因,因为在创建期间,英特尔处理器仅支持 32 位。

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

因此,要解决此问题,您必须将乘数和被乘数的大小缩短到 16 位(推荐方式),或者找到打印整个 edx:eax 的方法(可能会根据库的导入而变得困难) .

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2023-03-09
    相关资源
    最近更新 更多