win10错误代码52,win10系统提示502
2023-07-18
很多朋友对arm寄存器组有几个状态寄存器,ARM通用寄存器及状态寄存器详解不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。
笔者将讲一下ARM通用寄存器和状态寄存器的知识和理解。
ARM 通用寄存器
对于处理器来说,寄存器可以作为暂存器来存储临时结果,也可以作为输入数据以方便运算,也可以作为访问内存的索引,其功能多种多样。
皮质M3/M4
CortexM3/M4是比较常用的ARM架构。很多厂商都采用了这种架构,比如广受大家欢迎的ST的stm32,以及在Freescale比赛中一直很受欢迎的NXP的MK60芯片。国内兆易创新的GD32、亚特力的AT32、国民技术的N32系列。
它在嵌入式领域非常流行,比较好用,功能齐全,可以满足MCU的一般需求。
其寄存器模型如下:
通用寄存器R0-R7
、低组寄存器、32位、16位thumb和32位thumb-2指令均可访问
可以看到R0和R:1、R2作为参数传入。
随后将R0作为结果传递出去进行比较。
传入的参数是一个数组,为什么不直接传递地址(LDR),而是通过DCD指令传递呢?
这是因为LDR地址的范围是有限的,LDR Rn,#immediate地址,地址只有一个很小的范围(4KB?),所以可以看到DCD的地址并不远(6A92 - 6D48也不远) away),内存的地址在2000000范围内,与其地址相差较大。从图2看DCD之后的地址,实际上是先通过DCD的地址进行寻址,然后作为地址继续寻址。
R0-R3 一般作为参数传递。如果参数较多,则通过压栈的方式传递
R0 和R1 也将作为返回值传递。如果是32位的话就用R0,如果是64位的话就用R0-R1
通用寄存器R8-R12
,高组寄存器,32bit,较少可以访问16位thumb指令,一般是thumb-2指令。
R11一般用作FP指针,保存栈帧(添加编译选项时,见上一篇文章,下面的SP和LR类似于ARM开发中的几个常用寄存器的详细解释)。
堆栈指针R13(SP)指示当前堆栈的位置。
链接寄存器R14(LR)保存程序返回地址。
程序计数器R15 (PC)
程序运行的当前位置。
下图中,以一个PC作为基地址,然后访问内存,0x4079a1c+480=0x4079c04
下图2直接使用0x4079c04作为r0的地址
指令对齐半字或字地址,最低位为0
对于特殊的跳转指令,PC的最低位需要代表Thumb状态,否则会触发异常。
PC有时作为基地址寄存器,然后加上地址偏移量来访问数据
皮质R5
Cortex R系列继承了ARM7架构下的系统模型,具有多组工作模式,并且每种模式都有自己的地址空间(堆栈地址SP)
CortexR5属于ARMv7指令集。
与CortexM3/4一致,R0-R7和R8-R12的作用
用户模式和sys模式共享一组寄存器,即共享
在user/sys中,FIQ、SVC、ABT、IRQ和UND模式中,LR、SP和SPSR是独立的。切换CPSR模式后,SP、LR、SPSR自动切换为对应模式下的寄存器值
FIQ之所以被称为快速中断,是因为有独立的R8-R12寄存器,不需要压栈,直接使用。
SPSR是保存先前模式的CPSR。
ARMv7的通用AR系列的寄存器模型与上面基本相同,有一些新的扩展,
新增Hyp模式和Mon模式,分别用于虚拟扩展和安全扩展,
Hyp模式下的LR为ELR,记录异常发生时的返回地址,其他相同。
皮质A53
r0-r7用于传递参数或发回结果。
r8 间接结果位置寄存器
r9-r15 暂存器保存临时结果
r16-r17 动态链接所需的寄存器(并非系统中所有地址都可以跳转)(在链接器内部插入代码)
r18 平台ABI 特定寄存器,用于保存内部程序状态(为了平台通用性而避免)
r19-r28 被调用者保存的寄存器(相对而言,调用者保存的寄存器在CortexM3/4 中得到了很好的体现)
r29 FP寄存器,需要添加编译选项
r30链接寄存器
SP堆栈指针,
PC程序寄存器,可以看到程序调用时,函数类型为9个参数,汇编代码x0-x7作为参数传入,最后一个参数压栈传递,str x9,[SP ]。也是利用blr通过寄存器进行链接跳转,最后通过b跳转返回。
状态寄存器
该寄存器通常为CPSR(当前程序状态寄存器),用于指示当前程序运行状态、模式、运算结果状态、中断状态等,如下面的CPSR寄存器模型。
旗场
说明解释:表示程序运行结果的状态,可用于跳转,例如:结果是否为0、结果是否有进位、结果是否溢出、结果是否为负等。
符号为NCVZ,分别是负号(Negative)、进位(Carry)、溢出(Overflow)、0(Zero)符号。
衍生出很多跳转指令,在near范围或者函数范围内跳转,比如下面的指令
BEQ和BNE跳转通过判断Z==1,BEQ相等,如CMP X0,X1 BEQ
BCS和BCC判断C==1,BCS大于等于则跳转,BCC小于则跳转
BMI和MBL判断N==1,如果BMI为负数则跳转,如果BPL为整数则跳转
BVS和BVC判断V==1,溢出则跳转,BVC非溢出则跳转
BHI和BLS判断C==1且Z==0,大于则跳转,
BGE和BLT判断N==1和V==1,或者N==0和V==0有符号数大于或等于
BGT、BLE 通过判断Z=0、N==1 和V==1 或Z=0 N==0 和V==0 有符号数是否大于
相对数运算对标志位的影响。
中止控制域
例如,常见的DAIF中断屏蔽位有:
处理器状态调试中断屏蔽位:查看点、断点和系统单步运行
系统错误中断屏蔽位(通常是异步错误)
正常中断屏蔽
快速中断屏蔽位的常用中断控制域如上图所示,
CortexM3/4有独立的寄存器primmask,可以屏蔽中断,只有普通中断,没有快速中断(支持嵌套,所以快不快并不重要,同时进入中断后,硬件自动压入相关寄存器,也提高了中断速度),cpsr中没有中断屏蔽相关,
CortexR5和A53系列都有这样的中断控制域,可以在访问关键资源时屏蔽中断。
模式控制域
CPSR的低五位是模式控制位,控制当前CPU处于什么模式。设置各种模式是为了处理异常和分级管理。对特定资源的低级访问是不可能的,而特权模式可以对资源进行操作。
通过写CPSR的低五位,可以控制系统处于哪种模式。
通过读取CPSR的第五位,还可以知道当前处于哪种模式,并判断程序发生了什么故障。
modedescriptionrestriction用户模式以非特权模式运行用户程序,无法处理异常。除非有例外,否则无法更改当前模式来限制对系统资源(外设和内存)的访问。 SVC模式用于系统管理,例如系统下的资源访问,以及可以由软件触发OS的调度管理。在特权模式下,执行SVC指令可以进入该异常,复位后进入该模式。 (正常行为,由软件触发)系统模式与用户模式共享所有寄存器。特权模式不能通过异常进入,(正常行为,软件触发)Abort Mode Data Abort 或Prefetch Abort,前者是数据访问错误,后面是取指令错误,特权模式,(异常行为,硬件检测)未定义模式指令相关异常处理,如执行到未定义指令、特权模式、(异常行为、硬件检测) FIQ Mode 特权模式、处理快速中断、(正常行为、硬件触发) IRQ Mode 特权模式、处理普通终端、(正常行为,硬件触发)命令选择字段
T Value 指令集描述0 ARM 指令集32 位DWORD 对齐指令1 Thumb 指令集部分为16 位半字(half word)对齐指令,增加代码密度,减小Image sizeX 关联这两个指令集可用于组合,通过状态表示,例如通过bx和blx,可以切换指令集endian控制域
Endian 状态值模式说明设置指令0 Little-Endian 模式存储器低字节低位SETEND LE1 Big-Endian 模式存储器高位低字节SETEND BE 执行状态控制字段
一些控制系统状态的标志,例如ARMv8-A系列
标志属性说明HTMLSP_ELxStack指针寄存器选择,'如SP_EL0或SP_EL3EL'异常级别'“EL0,EL:1、EL2和EL3” SS软件单步控制用于调试器使PE单步指令审计唐子宏
以上知识分享希望能够帮助到大家!
版权声明:本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们
推荐阅读
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
2023-07-18
栏目热点
危化品仓库管理规范? 危化品仓库管理制度
LilyGoT手表键盘C3迷你电脑套件
索泰ZBOXEdgeCI342迷你电脑正式上市
谷歌在最新的视频预告片中展示了PixelWatch的独特设计
三星与设计师Juun.J合作推出限量版可折叠产品和配件
从2023年起Fitbit设备将需要Google帐户
TOKKCAMC2+智能WiFi独立日 夜视摄像头
三星正在与全球时尚品牌JUUN.J合作
OnePlusNordWatch的颜色选项通过泄露的渲染揭示
就在第一款Nothing手机发布之前一种新的TWS芽设计浮出水面