大家好,今天来聊聊 ARM 通用寄存器以及状态寄存器的认识与理解。
CortexM3/M4是比较常用的ARM架构,很多厂商都采用了这样的架构,比如ST公司的stm32,广受大家欢迎,还有NXP的MK60芯片,一直在飞思卡尔比赛中很受欢迎,还有国产兆易创新的GD32,亚特力的AT32,国民技术的N32系列。
其在嵌入式领域非常受欢迎,相对方便上手,功能齐全,满足一般的对MCU的需求。
低组寄存器,32bit,16位thumb以及32位的thumb-2指令均可以访问
可以看到R0、R1、R2三个作为参数传递进入。
后面R0作为结果传出进行比较。
传入参数是数组,为什么不直接传地址(LDR),而是通过DCD指令来传递呢?
通用目的寄存器R8-R12
高组寄存器,32bit,较少的16位thumb指令可以访问,一般是 thumb-2指令访问。
栈指针R13(SP), 指示当前栈所指位置。
链接寄存器R14(LR), 保存程序返回地址。
程序计数器R15(PC),程序运行的当前位置。
Cortex R系列继承了ARM7架构下的系统模型,有多组工作模式,每个模式都有自己的地址空间(堆栈地址SP)
ARMv7的一般AR系列的寄存器模型和上述的基本相同,有一些新的扩展,
PC 程序寄存器
可以看到程序调用时,函数类型为9个参数,汇编代码x0-x7作为参数传递进去,最后一个参数,压栈进行传递,str x9,[SP] 。
还用到了 blr 通过寄存器去进行链接跳转 最后通过b 跳转返回。
寄存器通常是CPSR(Current Program state register),用来表示当前程序运行的状态、模式、运算结果状态、中断状态等。,比如下面这个CPSR寄存器模型。
说明解释:表示程序的运行结果的状态,可以用来跳转,例如:结果是否为0,结果是否有进位,结果是否溢出,结果是否为负数等等。
比如常见的DAIF 中断屏蔽位,分别为:
CPSR的低五位为模式控制位,控制当前CPU为何种模式,设置各种模式则是为了处理异常以及分层管理,低级无法访问特定资源,而特权模式则可以进行资源上的操作。
mode | description | restriction |
---|---|---|
User Mode | 运行用户程序,非特权模式 ,无法处理异常,除非异常,否则无法改变当前模式 | 对系统资源的访问进行限制(外设以及memory) |
SVC Mode | 用于系统管理,比如系统下的资源访问,以及OS的调度管理,可以通过软件触发,特权模式 ,执行SVC指令可以进入到本异常,复位之后进入该模式 ,(正常行为,软件触发到 ) | |
system Mode | 与用户模式共享所有寄存器,特权模式 ,不能通过异常进入,(正常行为,软件触发 ) | |
Abort Mode | Data Abort或者Prefetch Abort,前者是数据访问出错,后面是取指令错误,特权模式 ,(异常行为,硬件检测到 ) | |
Undefined Mode | 指令相关的异常处理,例如执行到未定义的指令,特权模式 ,(异常行为,硬件检测到 ) | |
FIQ Mode | 特权模式 ,处理快速中断,(正常行为,硬件触发到 ) | |
IRQ Mode | 特权模式 ,处理普通终端,(正常行为,硬件触发到 ) |
T Value | 指令集 | 描述 |
---|---|---|
0 | ARM指令集 | 32位DWORD对齐的指令 |
1 | Thumb指令集 | 部分为16位半字(half word)对齐的指令,增加代码密度,减少Image size |
X | 关联 | 两种指令集可以混合使用,通过状态来表征,比如通过bx 、blx可以切换指令集 |
endian state value | 模式 | 描述 | 设置指令 |
---|---|---|---|
0 | 小端模式 | memory 低字节在低位 | SETEND LE |
1 | 大端模式 | memory 低字节在高位 | SETEND BE |
一些控制系统状态的标志位,比如ARMv8-A系列
标志属性 | 描述 | HTML |
---|---|---|
SP_ELx | Stack pointer register selected,' | 比如SP_EL0 或者SP_EL3 |
EL | "异常等级" | “EL0、EL1、EL2以及EL3” |
SS | 软件单步控制 | for debugger make PE single-step instruction |
原文:https://blog.csdn.net/qq_34430371/article/details/125820927
文章来源于网络,版权归原作者所有,如有侵权,请联系删除。
关注【一起学嵌入式】,回复“加群”进技术交流群。
觉得文章不错,点击“分享”、“赞”、“在看” 呗!