如何解释这个地址 -0x80(%rbp,%rax,4)
Posted
技术标签:
【中文标题】如何解释这个地址 -0x80(%rbp,%rax,4)【英文标题】:How to interpret this address -0x80(%rbp,%rax,4) 【发布时间】:2012-11-13 10:28:07 【问题描述】:我目前正在尝试通过分析简单的 C 代码 sn-ps 来学习汇编语言(以及不同编译器选项的效果)。现在我偶然发现了以下说明:
mov %edx,-0x80(%rbp,%rax,4)
我不明白的是目标地址-0x80(%rbp,%rax,4)
的表达式。
该指令在循环中为本地数组赋值。
【问题讨论】:
【参考方案1】:-0x80(%rbp,%rax,4) = *(%rbp + %rax * 4 + (-0x80))
所以下面的指令:
mov %edx,-0x80(%rbp,%rax,4)
表示让CPU将寄存器%edx的值移动到地址(%rbp + %rax * 4 + (-0x80))
的内存中,这是AT&T风格的汇编。
【讨论】:
【参考方案2】:机器命令会将%edx
的内容复制到%rbp + 4 * %rax - 0x80
给出的地址。似乎%rax
持有该数组的索引,%rbp - 0x80
是基地址。
查看here 以更好地了解 AT&T 语法。
【讨论】:
感谢您的回答 - 链接真的很有帮助以上是关于如何解释这个地址 -0x80(%rbp,%rax,4)的主要内容,如果未能解决你的问题,请参考以下文章