ARM基础

您所在的位置:网站首页 arm基础指令 ARM基础

ARM基础

2023-08-14 12:12| 来源: 网络整理| 查看: 265

文章目录 前言影子寄存器存在的意义r13(sp)寄存器的意义r14(lr)寄存器的意义cpsr寄存器spsr寄存器的意义 总结

前言 每一种模式下,能够访问的寄存器是不一样的。ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,其他寄存器虽然名字相同但是在当前模式不可见。对r14这个名字来说,在ARM中共有6个名叫r14(又叫sp)的寄存器,但是在每种特定处理器模式下,只有一个r14是当前可见的,其他的r14必须切换到他的对应模式下才能看到。这种设计叫影子寄存器(banked register)。

在这里插入图片描述

在这里插入图片描述  上图中,黑色就是在各种模式下它只有一个,是没有影子寄存器的,以r0 ~ r7举例,在ARM处理器下,各个模式下访问的r0 ~ r7是同一个寄存器没有差别。一样的如r15(pc)和cpsr寄存器都是只有一个的。在各个模式下访问这些寄存器都是同一个。  相对应的是其他的比如r13(sp),r14(lr),spsr这三个寄存器在各种模式下都是独立的寄存器。那是因为在各种模式下都需要一个独立的基本的程序运行环境,从而在某一个模式下的程序奔溃不会影响到其他模式–冗余设计形成鲁棒性!

影子寄存器存在的意义

影子寄存器有:

r8 (只用与FIQ)r9 (只用与FIQ)r10 (只用与FIQ)r11 (只用与FIQ)r12 (只用与FIQ)r13 (sp)r14 (lr)spsr

所有模式下公用的寄存器有:

r0r1r2r3r4r5r6r7r15 (pc) :它是绝对的“皇帝”它指向就运行到哪,一山不容二虎,所以它只能是唯一的一个。cpsr: r13(sp)寄存器的意义

 以User模式下r13(sp)和IRQ模式下的r13(sp)寄存器是不一样的为例来讲述影子寄存器的意义,sp就是堆栈寄存器,User模式就是正常程序,User模式下正常程序发生了中断就会“保护现场–需要User模式下sp寄存器”然后跳到IRQ模式下,那如果中断处理失败IRQ模式下的栈出了问题是不会影响到User模式下的栈的(增加了冗余增强了鲁棒性),因为那是不同的两个sp寄存器。而这里在不同的模式下都有不同的r13(sp)就是说在每种模式下都有独立的栈,从而在任何一个模式下的栈的奔溃不会影响到其他模式的栈。

r14(lr)寄存器的意义

 而r14(lr)其实是作为一个返回控制的用来存储在每种模式下的返回地址的。但是,IRQ应该是没有返回地址的因为它是中断处理不需要返回地址啥的,其实r14(lr)还可以作为函数调用的返回地址(中断处理函数就不调用其他函数了吗?)这里复杂性包括了比如:User模式下发生了IRQ中断User模式的r14(lr)寄存器保存了待会中断处理完之后的返回地址,那在IRQ模式下又发生了FIQ(优先级比IRQ还高)中断这时IRQ模式的r14(lr)就会保存FIQ完成之后的返回地址…因此显示出各个模式下r14(lr)寄存器必须设定为独立寄存器的必要性了!

cpsr寄存器

在这里插入图片描述

cpsr程序状态寄存器:用于保存当前程序的一些状态,因此每一个模式都需要一个cpsr来记录当前模式下的程序的状态。

spsr寄存器的意义

spsr–保存程序状态寄存器用来保存cpsr的。  如上图,几个模式下只有User模式没有spsr,因为User模式在跳到其他模式之后,其他模式的spsr会保存User模式的cpsr,以便于从其他模式返回User模式时从其他模式的cpsr拷贝回cpsr快速恢复User模式下的程序状态。

为什么要设置这么多的影子寄存器就是为了在进行各种模式切换的时候,实现性能与开销的一个最佳的比率,这就是设置影子寄存器的目的。

总结 ARM共有37个寄存器,都是32位长度的。37个寄存器中有30个是“通用”型的,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3