Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android CPU注册名称?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
代码片段是从Samsung 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

r0到r9非常清楚通用寄存器,sp(r13)是堆栈指针,pc(r15)是程序计数器(指令指针).参Wikipedia’s ARM Architecture page Registers section(我浏览过的许多页面之一),我发现lr(r14)是链接寄存器,cpsr是“当前程序状态寄存器”.

我想知道sl(r10),fp(r11)和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注册名称?全部内容,希望文章能够帮你解决Android CPU注册名称?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。