"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 个字节。
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 个字节。