x86 行 "imulq ,(%rbx), %rax" 有什么作用?
What does the x86 line "imulq $44,(%rbx), %rax" do?
我理解 imul 是有符号乘法,文档似乎暗示三操作数语法是 imulq dest, source1, source2
。因此,该行将读作:将存储在 %rbx 中的地址的内容与 %rax 中的值相乘,然后将其存储在内存位置 44,但这肯定不正确?
我阅读的操作数顺序与文档描述的顺序不同。
读作:"Get the signed integer value stored in the memory address in register rbx, multiply it by 44, and put the result in register rax."
或者简单地说:
imulq multiplier1, multiplier2, destination
您正在使用 imul
指令的三操作数变体,它在指令集参考中定义为 IMUL r64, r/m64, imm8
,意思是 "Multiply the contents of r/m64
by imm8
and store the result in r64
"。该指令还有另一种变体,它采用 32 位立即数,但在这种情况下无法判断汇编程序实际发出的变体。
现在,您的汇编器似乎正在使用 x86 汇编的 AT&T 语法。 GNU 汇编程序默认使用它。它以逆序指定指令的操作数而闻名。因此,imulq , (%rbx), %rax
会将 %rbx
中存储的地址的内存内容乘以 44
,并将结果存储在 %rax
.
中
我理解 imul 是有符号乘法,文档似乎暗示三操作数语法是 imulq dest, source1, source2
。因此,该行将读作:将存储在 %rbx 中的地址的内容与 %rax 中的值相乘,然后将其存储在内存位置 44,但这肯定不正确?
我阅读的操作数顺序与文档描述的顺序不同。
读作:"Get the signed integer value stored in the memory address in register rbx, multiply it by 44, and put the result in register rax."
或者简单地说:
imulq multiplier1, multiplier2, destination
您正在使用 imul
指令的三操作数变体,它在指令集参考中定义为 IMUL r64, r/m64, imm8
,意思是 "Multiply the contents of r/m64
by imm8
and store the result in r64
"。该指令还有另一种变体,它采用 32 位立即数,但在这种情况下无法判断汇编程序实际发出的变体。
现在,您的汇编器似乎正在使用 x86 汇编的 AT&T 语法。 GNU 汇编程序默认使用它。它以逆序指定指令的操作数而闻名。因此,imulq , (%rbx), %rax
会将 %rbx
中存储的地址的内存内容乘以 44
,并将结果存储在 %rax
.