【问题标题】:Can there two leaq instructions be merged into one?可以将两个 leaq 指令合并为一个吗?
【发布时间】:2018-10-26 18:59:17
【问题描述】:

Computer Systems: a Programmer's Perspective 提供了一些 ATT 汇编示例。这是一个:

数组元素 A[i][j] 可以被复制到寄存器 %eax 以下代码:

(A in %rdi, i in %rsi, and j in %rdx)

1 leaq (%rsi,%rsi,2), %rax Compute 3i
2 leaq (%rdi,%rax,4), %rax Compute x_A + 12i
3 movl (%rax,%rdx,4), %eax Read from M[x_A + 12i + 4j]

前两条指令可以合并成吗

leaq (%rdi,%rsi,12), %rax

因为它还计算 x_A + 12i?

为什么这本书选择写两条指令呢?在其他示例中也会发生同样的情况。

谢谢。

【问题讨论】:

  • 参见图 3-11。基本架构手册中的偏移(或有效地址)计算。

标签: assembly x86 att


【解决方案1】:

不,只有比例因子 1、2、4 和 8(可以说是零,对于“无索引”情况,但编码暗示了不同的解释)存在,其他任何东西都无法编码​​。比例因子不是这样编码的任意整数,the encoding 仅提供特定选项可供选择。

【讨论】:

  • 刻度是 2 位移位计数。正如您所说,no-index 由意味着 index=RSP 的代码编码。这就是 RSP 不能成为索引寄存器的原因。
猜你喜欢
  • 2017-05-27
  • 2016-12-30
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2017-07-09
  • 2021-10-11
  • 1970-01-01
  • 2014-05-30
相关资源
最近更新 更多