是否可以将两个leaq指令合并为一个?

时间:2018-10-26 18:59:17

标签: assembly x86 att

有一些来自计算机系统的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?

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

谢谢。

1 个答案:

答案 0 :(得分:2)

否,仅存在比例因子1、2、4和8(对于“无索引”情况,可能为零,但编码建议使用不同的解释),其他任何内容均无法编码。比例因子不是这样编码的任意整数,the encoding仅提供特定的选项供您选择。