【问题标题】:What does this assembly statement mean?这个汇编语句是什么意思?
【发布时间】:2011-11-14 12:52:54
【问题描述】:

我正在查看 gcc 使用 -s 标志生成的汇编代码。一些语句如下所示。

movl    is_leader(%rip), destination

这里,is_leader 是 C 代码中 int 类型的全局定义变量。我不明白的是这里的术语 is_leader(%rip)rip 不是指令指针吗?我需要知道如何使用此语句访问 is_leader

【问题讨论】:

    标签: c gcc assembly 64-bit x86


    【解决方案1】:

    它要求汇编器生成代码,将当前指令的地址与对象地址之间的差加或减到指令指针中。

    这给出了对象的地址而不生成绝对地址(通常,偏移量适合 16 或 32 位,因此生成的代码也更短,因此更快)。

    这增加了两个项目之间的距离保持不变的约束,所以这只能用于同一个可加载对象中的数据;如果不满足该条件,链接器将标记错误。

    【讨论】:

      【解决方案2】:

      可能与 *.so 可执行文件中的位置无关代码有关。

      【讨论】:

      • 它要求汇编程序生成代码,将当前指令的地址与对象地址之间的差加或减到指令指针;这给出了对象的地址而不生成绝对地址(通常,偏移量适合 16 位或 32 位,因此生成的代码也更短,因此更快)。
      • 这是正确的答案——它是AMD64 指令集的一个特性。
      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 2021-12-25
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多