3

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

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

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

4

2 回答 2

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

所以下面的指令:

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

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

于 2012-11-13T10:38:43.967 回答
7

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

查看此处以更好地理解 AT&T 语法。

于 2012-11-13T10:37:20.497 回答