【问题标题】:How to interpret this address -0x80(%rbp,%rax,4)如何解释这个地址 -0x80(%rbp,%rax,4)
【发布时间】:2012-11-13 10:28:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: assembly x86-64 att


    【解决方案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 语法。

      【讨论】:

      • 感谢您的回答 - 链接真的很有帮助
      猜你喜欢
      • 2021-02-10
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多