arm哪些寄存器使用不需要保存?
时间: 2024-03-11 21:43:44 浏览: 21
在 ARM 架构中,有一些寄存器不需要保存,这些寄存器被称为非保留寄存器。以下是 ARMv7-A 架构中的非保留寄存器列表:
1. r0 - r3 寄存器:这些寄存器主要用于函数参数传递和局部变量存储,因此在函数调用期间不需要保存。
2. r12 寄存器(也称为 IP 寄存器):该寄存器用于临时存储中间值和计算结果,因此在函数调用期间通常不需要保存。
3. r14 寄存器(也称为 LR 寄存器):该寄存器用于保存函数调用返回地址,但在函数调用期间可以使用该寄存器进行其他用途。但在函数返回前需要将该寄存器的值恢复为原始的返回地址。
需要注意的是,虽然这些寄存器不需要在函数调用期间保存它们的值,但在函数返回之前必须将这些寄存器恢复为原始值,以避免对调用函数的影响。
相关问题
arm vixl怎么申请一个寄存器保存值,并且保证这个寄存器不会被其他地方使用
在ARM VIXL中,可以使用汇编指令来申请一个寄存器保存值,并且保证这个寄存器不会被其他地方使用。
具体地,可以使用以下汇编指令:
```
mov r0, #0x1234 ; 将值 0x1234 存储到寄存器 r0 中
push {r0} ; 将寄存器 r0 中的值压入栈中,此时寄存器 r0 可以用作其他用途
```
这里使用了 push 指令将寄存器 r0 中的值压入栈中,因此可以确保这个寄存器不会被其他地方使用。如果需要重新使用这个寄存器,可以使用 pop 指令将栈中的值弹出到寄存器中:
```
pop {r0} ; 将栈顶的值弹出到寄存器 r0 中,此时寄存器 r0 中保存的是之前存储的值 0x1234
```
需要注意的是,这种方法只能保证寄存器不被其他地方使用,但不能保证其他代码不会修改这个寄存器中的值。如果需要保证数据不被修改,可以使用更高级的方法,比如使用锁或者原子操作等技术来保护数据的完整性。
ARM64 状态寄存器
在ARM64架构中,状态寄存器又被称为程序状态寄存器(PSR),它用于存储当前指令的执行状态和处理器的状态信息。ARM64架构中的PSR寄存器共有4个,分别是:Current Program Status Register(CPSR)、Saved Program Status Register(SPSR)、Exception Syndrome Register(ESR)和Exception Link Register(ELR)。
其中,CPSR是当前正在执行指令的状态寄存器,记录了当前处理器的执行状态。SPSR是CSRP的备份寄存器,用于记录异常处理过程中的状态。ESR寄存器用于记录异常的原因和类型等信息。ELR寄存器用于保存异常发生时的程序计数器的值,以便异常处理程序处理完异常后能够恢复程序的执行。
状态寄存器在ARM64架构中扮演着非常重要的角色,它们记录了处理器的状态信息,能够帮助处理器正确地执行指令并处理异常情况。