gpt4 book ai didi

Android CPU寄存器名称?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:46:33 27 4
gpt4 key购买 nike

此代码 fragment 摘自三星 Tab S 上的 Android 崩溃报告:

Build fingerprint: 'samsung/chagallwifixx/chagallwifi:5.0.2/LRX22G/T800XXU1BOCC:user/release-keys'
Revision: '7'
ABI: 'arm'
r0 a0d840bc r1 a0dcb880 r2 00000001 r3 a0d840bc
r4 a0dc3c4c r5 00000000 r6 a066d200 r7 00000000
r8 32d68f40 r9 a0c359a8 sl 00000014 fp bef3ba84
ip a0dc3fb8 sp bef3ba10 lr a0c35a0c pc a0c34bc8 cpsr 400d0010

r0r9 显然是通用寄存器,sp (r13) 是堆栈指针, pc (r15) 是程序计数器(指令指针)。引用Wikipedia's ARM Architecture page Registers section (我浏览过的 许多 页之一),我发现 lr (r14) 是链接寄存器,而 cpsr 是“当前程序状态寄存器”。

我想知道什么是sl (r10), fp (r11) and ip (r12) 是。我希望 ip 不是“指令指针”,因为该功能是由 pc (r15) 完成的。

有没有我没有找到的引用文档来说明这些名称?

最佳答案

当前ARM EABI procedure call standard概述了 r12-r15 的标准“特殊”名称:

  • PC (r15):程序计数器
  • LR (r14): 链接寄存器
  • SP (r13): 堆栈指针
  • IP (r12):过程内临时寄存器*

GNU 工具还支持来自已弃用 legacy APCS 的名称作为给定寄存器编号的标识符,即使它们不再一定具有任何意义:

  • FP (r11):帧指针 - 对于 ARM 代码可能仍然适用; Thumb 代码倾向于在 r7 中保留实际的帧指针,当然代码可能根本没有帧指针就可以编译,在这种情况下,“fp”只是另一个被调用者保存的通用寄存器。
  • SL (r10):堆栈限制 - 我实际上并不知道它的历史,但在大多数现代代码中,r10 并不比 r4-r8 更特殊。

请注意,r9 不一定是通用寄存器 - EABI 将其保留用于特定于平台的目的。在 linux-gnueabi 下它没什么特别的,但其他平台可能将它用于特殊目的,如 TLS 或全局对象表指针,因此它也可能通过 SB(静态基)或 TR(线程寄存器)。

* PC 相关分支指令的有限范围背后的故事 - 如果链接器发现调用的目标最终超过 32MB,它可能会生成一个单板(一些额外的指令在范围内调用站点)作为分支目标,它计算真实地址并执行绝对分支,为此它可能需要一个临时寄存器。

关于Android CPU寄存器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33245751/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com