我熟悉这种形式的内存引用:
XXX ptr [base + index * size + displacement]
其中XXX代表某个大小(字节/字/双字等),base
和index
都是寄存器,size
是2的幂次方,displacement
是有符号值。
amd64引入了rip相对寻址。据我所知,我应该能够使用rip
作为基本寄存器。然而,当我尝试在clang-900.0.39.2中这样做时:
mov r8b, byte ptr [rip + rdi * 1 + Lsomething]
I get:
error: invalid base+index expression
mov r8b, byte ptr [rip + rdi * 1 + Lsomething]
当使用rip
作为基址寄存器时,是否无法使用索引寄存器?我需要使用lea
指令来计算rip + Lsomething
,然后进行偏移吗?
movzx r8d,byte ptr [...]
,除非您明确想要将其合并到R8的现有内容中,而不是为该寄存器启动新的依赖链。 - Peter Cordes