ARM处理器的寄存器

ARM处理器共有37个寄存器.

ARM状态下寄存器的组织方式

虽然ARM处理器共有37个寄存器,但是根据处理器的运行模式,程序能够真正使用的只是其中的18个或者17个。


两种或两种以上运行模式所共享的寄存器叫做基础寄存器。他们是R0-R15和CPSR,其中R0-R7、R15和CPSR为所有运行模式共享;R8~R12为除了快中断模式之外的其他所有运行模式共享;R13和R14为用户模式和系统模式共享,如下图所示:
在这里插入图片描述


程序计数器PC
在CPU中,一条指令的执行简单的划分为:取指-译码-执行,三个部分。

PC中存放的是下一条将要“执行”的指令的地址,这里的执行并不是取指-译码-执行中的第三个步骤,而是指的将存放于内存中的指令输送进CPU中“准备执行”,那么第一步就要取指,PC中存放的是从内存中取指所需要的地址。
ARM处理器的字长是32位,则一条汇编指令的长度也是32位,也就是四个字节,而内存中一个地址单元是一个字节,也就是说一条指令要占据4个地址单元。
假设程序顺序执行(一条接一条,没有跳转),假设当前正在CPU中执行的指令A的首地址是0,也就是说指令A的存放位置是内存中的0—3这4个地址单元。
假设指令A后面紧跟着指令B,指令B后面紧跟指令C,如果顺序执行,按理来说pc中存放的地址应该是指令B的首地址,也就是PC=0+4。
但是由于ARM处理器中采用了流水线的技术,假设是3级流水线,那么执行A处于三个步骤中的“执行”时,指令B已经开始进行“译码”,而真正开始“取指”的是指令C。
也就是说,当指令A在运行的时候,PC中存放的地址应该是指令C的地址,也就是说PC=0+8。


程序状态寄存器PSR
基础寄存器R16专门用作程序状态寄存器。为了提高程序的可读性,程序中也可以称为PSR。
在这里插入图片描述
ARM处理器中有6个PSR,当前程序状态寄存器CPSR是所有运行模式所共享的,而另外5个PSR为模式私有,用来对CPSR进行备份的寄存器叫做SPSR。

由于CPSR中保存的是程序当前运行模式的状态信息,所以当前运行模式发生变化时,为了防止这些信息丢失,ARM对每种异常运行模式都设置了一个与CPSR的格式完全相同的备份寄存器SPSR(Saved Progarm Status Register)。即当处理器进入异常运行模式时,系统会自动把CPSR的当前值转存到SPSR;当从异常模式退出时,再自动把当初保存到SPSR中的状态信息存回CPSR。

由于用户模式和系统模式不属于异常模式,所以这两个模式没有SPSR。


堆栈指针R13(SP)
堆栈是计算机存储数据的一种数据结构,SP的作用就是指示当前要出栈或入栈的数据,并在操作执行后自动递增或递减。

计算机中的堆栈主要用来保存临时数据,局部变量和中断/调用子程序程序的返回地址。程序中栈主要是用来存储函数中的局部变量以及保存寄存器参数。

  1. 保存现场;
  2. 传递参数:汇编代码调用 C 函数时,需传递参数;
  3. 保存临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量;

链接寄存器R14(LR)
寄存器R14也称为子程序链接寄存器(Subroutine Link Register)或链接寄存器LR。当执行子程序调用指令BL时,R14会备份R15(程序计数器PC)的内容,以便子程序结束后能使程序正确地返回。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值