我知道imul是带符号的乘法,文档似乎暗示三个操作数语法是imulq dest, source1, source2
。因此,该行将读取为:将存储在%rbx中的地址的内容与%rax中的值相乘,然后将其存储在内存位置44中,但这肯定是不正确的?
答案 0 :(得分:3)
您正在使用imul
指令的三操作数变体,该指令在指令集引用中定义为IMUL r64, r/m64, imm8
,表示“r/m64
的内容乘以{{ 1}}并将结果存储在imm8
“中。此指令的另一个变体是立即采用32位,但在这种情况下无法确定汇编程序实际发出的变量。
现在,您的汇编程序似乎正在使用x86程序集的AT& T语法。它默认由GNU汇编程序使用。已知以相反的顺序指定指令的操作数。因此,r64
会将imulq $44, (%rbx), %rax
中存储的内存的内容乘以%rbx
,并将结果存储在44
中。
答案 1 :(得分:0)
我正在阅读操作数的顺序与文档描述的方式不同。
它读作:“获取存储在寄存器rbx的存储器地址中的有符号整数值,将其乘以44,并将结果存入寄存器rax。”
或者简单地说:
imulq multiplier1, multiplier2, destination