我目前正在尝试通过分析简单的C代码片段来学习汇编语言(以及不同编译器选项的效果)。现在,我完成了以下指令:
mov %edx,-0x80(%rbp,%rax,4)
我不明白的是目标地址-0x80(%rbp,%rax,4)
的表达式。
该指令为循环中的本地数组赋值。
答案 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风格的汇编。