为什么ARM要这样给寄存器分配地址呢?
Why does ARM assign addresses to registers like this?
正如您在以下 ARM64 片段中所见,这恰好来自 iOS 10.
的内核
fffffff0073de41c adrp x22, #0xfffffff0075ef000
fffffff0073de420 ldr x0, [x22, #0x330]
为什么会像上面那样加载特定地址? 0xfffffff0075ef000 + 0x350
,因为它是预编译的,所以只加载整个地址 0xfffffff0075ef330
.
没有意义吗?
对不起我的无知。
要加载整个地址,您需要更多指令(通常,您需要 4 条指令来加载 64 位立即值)。
ADRP 指令(可能与 ADR 合作)的目的是能够使用比加载立即值所需指令更少的指令来使用符号地址。
正如您在以下 ARM64 片段中所见,这恰好来自 iOS 10.
的内核fffffff0073de41c adrp x22, #0xfffffff0075ef000
fffffff0073de420 ldr x0, [x22, #0x330]
为什么会像上面那样加载特定地址? 0xfffffff0075ef000 + 0x350
,因为它是预编译的,所以只加载整个地址 0xfffffff0075ef330
.
对不起我的无知。
要加载整个地址,您需要更多指令(通常,您需要 4 条指令来加载 64 位立即值)。
ADRP 指令(可能与 ADR 合作)的目的是能够使用比加载立即值所需指令更少的指令来使用符号地址。