Fre*_*ara 6 android arm computer-architecture cpu-registers
此代码片段是从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
Run Code Online (Sandbox Code Playgroud)
r0通过r9非常清楚的通用寄存器,sp(r13)是堆栈指针,pc(r15)是程序计数器(指令指针).参考维基百科的ARM体系结构页面寄存器部分(我查看的许多页面之一),我发现lr(r14)是链接寄存器,并且cpsr是"当前程序状态寄存器".
我想知道what sl(r10),fp(r11)和ip(r12)是什么.我想到ip是不是该"指令指针",因为该功能是由完成pc(r15).
是否有一个我没有找到的参考文件说明了这些名称?
当前的ARM EABI过程调用标准概述了r12-r15的标准"特殊"名称:
GNU工具还支持已弃用的旧版APCS中的名称 作为给定寄存器编号的标识符,即使它们不再具有任何含义:
需要注意的是R9是不是一定是通用寄存器-在EABI保留它针对特定平台的目的.在linux-gnueabi下它没什么特别的,但是其他平台可能会将它用于特殊目的,如TLS或全局对象表指针,因此它也可以通过SB(静态基础)或TR(线程寄存器).
*PC相对分支指令的有限范围背后的故事 - 如果链接器发现呼叫的目标最终超过32MB,它可能会生成一个胶合代码(在呼叫站点范围内的一些额外指令)作为分支目标,它计算实际地址并执行绝对分支,它可能需要一个临时寄存器.
| 归档时间: |
|
| 查看次数: |
3715 次 |
| 最近记录: |