"mov offset(%rip), %rax" 是做什么的?

what does "mov offset(%rip), %rax" do?

rax 得到偏移加上这条指令的地址,还是下一条?从微码的角度来看,如果答案是下一条指令,可能会更容易。

下一个。这是 x86 上的一般规则(另请参阅分支)。

在英特尔手册第 2 卷第 2.2.1.6 节 RIP 相对寻址中:

A new addressing form, RIP-relative (relative instruction-pointer) addressing, is implemented in 64-bit mode. An effective address is formed by adding displacement to the 64-bit RIP of the next instruction.

注意symbol_name(%rip)计算的是从这里到达symbol_name所需的偏移量,而不是将symbol_name的绝对地址作为偏移量加到RIP中。

但是是的,对于像 mov 4(%rip), %rax 这样的 numeric 偏移量,它将从该指令结束后的 4 个字节开始加载 8 个字节。