我知道 imul 是有符号乘法,并且文档似乎表明三个操作数的语法是imulq dest, source1, source2
. 因此,该行将读取为:将 %rbx 中存储的地址的内容与 %rax 中的值相乘,然后将其存储在内存位置 44 中,但这肯定不正确吗?
您正在使用imul
指令的三操作数变体,该变体在指令集参考中定义为IMUL r64, r/m64, imm8
“乘以r/m64
by的内容imm8
并将结果存储在r64
”中。该指令还有另一种变体,它采用 32 位立即数,但在这种情况下,无法判断汇编器将实际发出哪个变体。
现在,您的汇编器似乎正在使用 x86 汇编的 AT&T 语法。GNU 汇编器默认使用它。以相反的顺序指定指令的操作数是众所周知的。因此,imulq $44, (%rbx), %rax
将乘以存储器的内容在存储在地址%rbx
通过44
,并且将结果存储在%rax
。