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

Assembly 如何将两个寄存器相乘并存储在不同的寄存器中?,assembly,x86,multiplication,Assembly,X86,Multiplication,因此,我尝试为汇编语言(英特尔x86,使用NASM)编写GCD程序,但失败了。当我尝试将两个寄存器相乘时,我经常会遇到编译器错误。我将用户值存储在寄存器ebx、ecx和edx中。我想把所有3乘起来 &将ebx和ecx的乘积存储在ebx中,然后将ebx和edx相乘,存储在ebx中,并显示结果。我正试图用这段代码来做这件事 imul ebx、ebx、ecx imul ebx、ebx、edx 这不是乘法寄存器的有效方法吗?imul的3操作数版本只将一个立即数作为第三个操作数。幸运的是,您可以使用2操作

因此,我尝试为汇编语言(英特尔x86,使用NASM)编写GCD程序,但失败了。当我尝试将两个寄存器相乘时,我经常会遇到编译器错误。我将用户值存储在寄存器ebx、ecx和edx中。我想把所有3乘起来 &将ebx和ecx的乘积存储在ebx中,然后将ebx和edx相乘,存储在ebx中,并显示结果。我正试图用这段代码来做这件事
imul ebx、ebx、ecx
imul ebx、ebx、edx

这不是乘法寄存器的有效方法吗?

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

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

将执行您想要的操作。

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

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

我会做你想做的。

如果看到我的整个程序会帮助别人帮助我,我非常乐意发布它!我暂时不提了,因为我认为这很可能是一个简单的问题,只会因为我笨拙难看的代码而变得复杂。哎呀,这些都是无效的。你的标题是“两个寄存器”,你的内容是“三个寄存器”什么是真的?很久以前我就编写了汇编程序,但IIRC CPU不能同时使用三个寄存器。身体上。也许这就是为什么你会犯错误的原因,你至少应该补充一下这个问题
JMP返回
并重试
:)如果看到我的整个程序将帮助别人帮助我,我非常乐意发布它!我暂时不提了,因为我认为这很可能是一个简单的问题,只会因为我笨拙难看的代码而变得复杂。哎呀,这些都是无效的。你的标题是“两个寄存器”,你的内容是“三个寄存器”什么是真的?很久以前我就编写了汇编程序,但IIRC CPU不能同时使用三个寄存器。身体上。也许这就是为什么你会犯错误的原因,你至少应该补充一下这个问题
JMP返回
并重试
:)@杰米·杰克逊——也许下载这本书是个好主意。像这样的问题比其他任何地方都要详细。@JamieJackson-也许下载这个文件是个好主意。像这样的问题比其他任何地方都要详细。