如何解释这个地址-0x80(%rbp,%rax,4)

时间:2012-11-13 10:28:07

标签: assembly x86-64 att

我目前正在尝试通过分析简单的C代码片段来学习汇编语言(以及不同编译器选项的效果)。现在,我完成了以下指令:

mov %edx,-0x80(%rbp,%rax,4)

我不明白的是目标地址-0x80(%rbp,%rax,4)的表达式。 该指令为循环中的本地数组赋值。

2 个答案:

答案 0 :(得分:7)

机器命令会将%edx的内容复制到%rbp + 4 * %rax - 0x80给出的地址。似乎%rax持有该数组的索引,而%rbp - 0x80是基地址。

查看here以更好地了解AT& T语法。

答案 1 :(得分:7)

-0x80(%rbp,%rax,4) = *(%rbp + %rax * 4 + (-0x80))

以下的说明如下:

mov %edx,-0x80(%rbp,%rax,4)

表示让CPU将寄存器%edx的值移动到地址(%rbp + %rax * 4 + (-0x80))的内存中,这是AT& T风格的汇编。