【问题标题】:How can i multiply two registers and store them in a different register?如何将两个寄存器相乘并将它们存储在不同的寄存器中?
【发布时间】:2016-01-18 10:51:30
【问题描述】:

所以我正在尝试为汇编语言(英特尔 x86,使用 NASM)制作 GCD 程序,但未能成功。我不断收到编译器错误的地方是尝试将两个寄存器相乘时。我将用户值存储在寄存器 ebx、ecx 和 edx 中。我想乘以所有 3 & 将 ebx 和 ecx 的乘积存入 ebx,然后将 ebx 和 edx 相乘,存入 ebx,并显示结果。我试图通过使用此代码来做到这一点 imul ebx, ebx, ecx imul ebx, ebx, edx 这不是乘法寄存器的有效方法吗?

【问题讨论】:

  • 如果看到我的整个程序会帮助有人帮助我,我非常乐意发布它!我暂时忽略了它,因为我认为这很可能是一个简单的问题,只会被我笨拙的丑陋代码复杂化。
  • 糟糕,这些无效。
  • 你的标题写着“两个寄存器”,你的内容“三个寄存器”是什么意思?我很久以前就编写了汇编程序,但是 IIRC CPU 根本无法同时使用三个寄存器。身体上。也许这就是您遇到错误的原因,您至少应该将其添加到问题中。 JMP BACKAND TRY AGAIN。 :)

标签: assembly x86 multiplication


【解决方案1】:

imul 的第三个操作数版本仅将立即数作为第三个操作数。幸运的是,您可以使用 2 操作数版本,因为您的操作数之一与目标相同。因此:

imul    ebx, ecx ; ebx *= ecx
imul    ebx, edx ; ebx *= edx

会做你想做的。

【讨论】:

  • @JamieJackson - 下载Intel reference manuals 或许是个好主意。此类问题比您在其他任何地方都能找到的更详细。
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2019-05-22
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
相关资源
最近更新 更多