- adr x9, #0x40
- adrp x9, 1356
- adrp x8, #_g@PAGE
add x8, x8, #_g@PAGEOFF
地址都是怎么计算出来呢
- adr xn, #imm => xn = $pc + imm
- adrp xn, #addr => xn = ($pc & (~(uint64_t)0xfff)) + addr << 12
注:$pc 为当前指令的地址
adrp 取出的是一个 64 位地址所在页的页偏移(@PAGE
),随后再加上地址在页内的偏移量(@PAGEOFF
),这一块如果有不清楚的地方可以看我之前写的一篇文章( https://juejin.im/post/5d67bbb7f265da03a53a4bce#heading-11 ):
3 个赞