一、寄存器的作用
寄存器是CPU的内部构成单元,是CPU运算时取指令和数据最快的地方。它可以用来暂存指令、数据和地点。在CPU的控制部件中,包罗的寄存器有指令寄存器(IR)和程序计数器(PC)。CPU的算术逻辑部件中,包罗的寄存器有累加器(ACC),具体的有:
- 高速访问:寄存器是CPU内部最快的存储单元,比主存(RAM)和缓存(Cache)访问速率更快,通常在一个时钟周期内完成读写操作。
- 减少等待时间:频仍利用寄存器进行数据存储和操作,减少了对主存的访问,制止了长时间的等待,从而进步了处理速率。
- 简化指令实行:寄存器直接存储操作数和计算结果,使指令实行更轻便,不必要频仍从内存读取数据,简化了指令的实行流程。
- 并行处理:寄存器支持多条指令的并行实行,通过寄存器重定名技术
- 制止数据相干性问题,进步指令级并行性和处理器的团体吞吐量。
- 减少总线辩论:利用寄存器操作数据可以减少总线访问频率,低沉总线辩论,进步体系的团体性能和相应速率。
二、寄存器(Register)与寄存器组结构
寄存器结构
每个寄存器由多个触发器构成,输入数据通过写使能信号控制是否写入新值。读出数据通过读口送出。当写使能(Write Enable)为0时,时钟边沿到来时输出稳定;当写使能信号为1时,时钟边沿到来时输出开始变为输入。若每个时钟边沿都写入,则不必要Write Enable信号。
寄存器组结构
寄存器组由多个寄存器构成,每个寄存器都可以通过编号来定位。N位编号可以表示2的N次方个寄存器,而M个寄存器的位数则是log M的上取整。
三、ARMv8寄存器介绍
ARMv8中有34个寄存器,包罗31个64 位通用寄存器、1个64 位的程序计数(Program Counter, PC)指针寄存器、栈指针(StackPointer, SP)寄存器以及异常链接寄存器(Exception Link Register, ELR),一个处理器状态寄存器PSTATE来表示当前的处理器状态(processor state),
1、通用寄存器
AArch64实行状态支持31个64位的通用寄存器,分别是X0-X30寄存器,而AArch32状态支持16个32位的通用寄存器。除用于数据运算和存储之外,通用寄存器还可以在函数调用过程中起到特殊作用,ARM64体系结构的函数调用尺度和规范对此有所约定,如下图所示。
- X0-X7 用于参数转达
- X9-X15 在子函数中利用这些寄存器时,直接利用即可, 无需save/restore. 在汇编代码中x9-x15出现的频率极低 在子函数中利用这些寄存器时,直接利用即可, 无需save/restore. 在汇编代码中x9-x15出现的频率极低
- X19-X29 在callee子函数中利用这些寄存器时,必要先save这些寄存器,在退出子函数时再resotre 在callee子函数中利用这些寄存器时,必要先save这些寄存器,在退出子函数时再resotre
- X8, X16-X18, X29, X30 这些都是特殊用途的寄存器 – X8: 用于返回结果 – X16、X17 :进程内临时寄存器 – X18 :resrved for ABI – X29 :FP(frame pointer register) – X30 :LR
在 AArch64 状态下,利用 X(如 X0、 X30 等)表示 64 位通用寄存器。别的,还可以利用
W 来表示低 32 位的数据,如 W0 表示 X0 寄存器的低 32 位数据, W1 表示 X1 寄存器的低 32
位数据,
2、PSTATE寄存器
AArch64 体系结构利用 PSTATE 寄存器来表示当前处理器状态(processor state),PSTATE的主要字段
- N(Negative):负数标记位,结果为负数时置1。
- Z(Zero):零标记位,结果为零时置1。
- C(Carry):进位标记位,算术运算发生进位时置1。
- V(Overflow):溢出标记位,算术运算发生溢出时置1。
- EL(Exception Level):异常级别,指示当前的异常处理级别。
- SP(Stack Pointer Select):栈指针选择,指示当前利用的栈指针(SP_EL0或SP_ELx)。
3、特殊寄存器
ARMv8架构中还有一些专用寄存器,用于特定功能和操作。主要的专用寄存器包罗:
- SP_ELx(Stack Pointer Registers for Exception Levels):每个异常级别都有独立的栈指针寄存器(SP_EL0, SP_EL1, SP_EL2, SP_EL3)。
- ELR_ELx(Exception Link Registers for Exception Levels):每个异常级别都有独立的异常链接寄存器(ELR_EL1, ELR_EL2, ELR_EL3),用于存储异常返回地点。
- SPSR_ELx(Saved Program Status Registers for Exception Levels):每个异常级别都有独立的保存程序状态寄存器(SPSR_EL1, SPSR_EL2, SPSR_EL3),用于保存异常发生时的PSTATE值。
4、体系寄存器
体系寄存器用于控制和管理CPU的操作模式、特权级别、内存管理、停止处理等关键体系功能。主要的体系寄存器包罗:
- SCTLR_ELx(System Control Register):体系控制寄存器,用于控制和设置处理器的体系级特性,如内存保护、缓存计谋等。
- TTBR0_ELx(Translation Table Base Register):转换表基地点寄存器,用于定义页表的基地点,支持内存地点转换和假造内存管理。
- MAIR_ELx(Memory Attribute Indirection Register):内存属性指示寄存器,用于定义差别内存区域的属性,如缓存计谋、访问权限等。
- TCR_ELx(Translation Control Register):转换控制寄存器,用于控制地点转换的行为和特性,如地点范围、页大小等。
- ESR_ELx(Exception Syndrome Register):异常综合症寄存器,用于存储异常发生时的状态信息,资助调试和错误处理。
程序可以通过 MSR 和 MRS 指令访问体系寄存器。
- mrs X0, TTBR0_EL1 //把 TTBR0_EL1 的值复制到 X0 寄存器
- msr TTBR0_EL1, X0 //把 X0 寄存器的值复制到 TTBR0_EL1
复制代码
参考:
https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4088083317822557806&sourceFrom=search_a
https://zhuanlan.zhihu.com/p/711014643
ARMv8寄存器详解-CSDN博客
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |