什么x86线“imulq $ 44,(%rbx),%rax”做什么?

时间:2017-05-04 21:02:09

标签: assembly x86 att

我知道imul是带符号的乘法,文档似乎暗示三个操作数语法是imulq dest, source1, source2。因此,该行将读取为:将存储在%rbx中的地址的内容与%rax中的值相乘,然后将其存储在内存位置44中,但这肯定是不正确的?

2 个答案:

答案 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