如何将两个寄存器相乘并将它们存储在不同的寄存器中?

Jam*_*son 1 x86 assembly multiplication

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

Jes*_*ter 6

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

imul    ebx, ecx ; ebx *= ecx
imul    ebx, edx ; ebx *= edx
Run Code Online (Sandbox Code Playgroud)

会做你想做的。

  • @JamieJackson - 也许下载 [英特尔参考手册](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) 是个好主意。像这样的问题比您在其他任何地方找到的都更详细。 (2认同)