2015-10-19 225 views
1

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

+0

如果看到我的整个程序会帮助别人帮助我,我很乐意发布它!因为我认为这很可能是一个简单的问题,只会让我笨拙的丑陋代码变得复杂起来。 –

+0

糟糕,那些无效。 – Jester

+1

你的头衔说“两个登记册”,你的内容是“三个登记册”什么是真的?我很早以前编写了汇编程序,但是IIRC CPU根本无法一次运行三个寄存器。物理。也许这就是为什么你会得到错误,至少应该增加这个问题。 'JMP返回''并再试一次'。 :) –

回答

3

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

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

会做你想做的。

+0

杰斯特非常感谢你!它最终编译!我知道它是一个完全简单的问题,但我似乎比其他任何东西都更加困难。 –

+2

@JamieJackson - 下载[Intel参考手册](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)或许是个好主意。 。像这样的问题比你在其他地方找到的更详细。 – owacoder

+0

我会给你一个阅读...我是一本手册/说明书horder,谢谢你的提示 –