GNU 64位程序集添加功能

时间:2017-11-18 16:05:51

标签: assembly x86-64 att

当我们有

add %rbx, %rax

这是否意味着将rbx的值添加到rax或将值rax添加到rbx?

如果例如rbx = 3且rax = 6,则在添加%rbx,%rax之后,%rax和%rbx的值是多少?

GNU x64汇编语法!

1 个答案:

答案 0 :(得分:1)

x86程序集有两种主要的"风格":Intel语法和AT& T语法(主要由GNU工具默认使用)。

您的代码段采用AT& T语法(其中寄存器名称以%为前缀);在AT& T语法中,操作数顺序通常是 source,destination ,所以

add %rbx, %rax

表示"将rbx添加到rax" (即,在C中它将是rax += rbx)。

这与英特尔语法相反,所以如果您在英特尔语法中看到一些代码段,例如

add rbx, rax

(注意没有%)这意味着"将rax添加到rbx" (即rbx += rax)。

你可以找到一个很好的AT& T vs Intel语法差异列表here