ARM寄存器分析以及异常处理方法

发布时间:2023-01-13  

ARM 有7个基本工作模式
User : 非特权模式,大部分任务执行在这种模式

FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式

IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式

Supervisor :当复位或软中断指令执行时将会进入这种模式

Abort : 当存取异常时将会进入这种模式

Undef : 当执行未定义指令时会进入这种模式

System : 使用和User模式相同寄存器集的特权模式

注意:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。 Privilege中除Sys模式外,其余5种为异常模式。 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。 各种模式下权限和可以访问的寄存器不同。

非特权模式:User

特权模式:
异常模式:FIQ IRQ Svc Abort Udef

非异常模式:System Monitor

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



r13(sp)用作堆栈可以保存上下文,便于以后跳转回来能继续执行

r14(lr)用于存储返回地址,当我们返回原模式可以bl lr或者mov pc lr这样就实现了返回

r15(pc):程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)

cpsr:中各个bit位表明了cpu的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和
CPSR中的Z标志位有关) cpsr中的I、F位和开中断、关中断有关 cpsr中的mode位(bit4~bit0共5位)决定了CPU的工作模式,
在uboot代码中会使用汇编进行设置。

spsr:用来保存cpsr



1.条件标志位

-N: Negative result from ALU

-Z: Zero result from ALU

-C: ALU operation Carried out (进位/借位)

-V: ALU operation oveRFlowed (溢出)

* N=1时,说明运算的结果为负数,N=0时,说明运算的结果为正数或零。

* Z=1时,说明运算的结果为0,Z=0时,说明运算的结果为非0。

* C:

- 加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则为0。

- 减法运算(包括CMP):当运算结果产生了借位时(无符号数溢出),C=0,否则C=1。

- 对于包含移位操作的非加减指令操作时,C为移除值的最后一位。

- 对于其它的非加减指令,C的值通常不变。

* V:

- 对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出

- 对于其它的非加减法指令,V的值通常不变。

2.Q位:

* 在ARM V5及以上的版本的E系列处理器中,Q标识位指示增强的DSP运算指令是否发生了溢出,在其它版本的处理器中,Q未定义。

3.J位:

* 仅ARM 5TE/J 架构支持

* J=1时,处理器处于Jazelle状态

跳转过程
异常向量表
所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作) 异常向量表是硬件向软件提供的处理异常的支持。



***异常产生时
做好保护现场的工作:

(1)把cpsr保存到spsr中,设置适当的cpsr(改变处理器的ARM状态、改变处理器进入相应的异常模式、(视情况)改变中断禁止位禁止相应中断)

(2)保存返回地址到lr

(3)设置pc为相应的异常向量

实现跳转。

***异常返回时
做好恢复现场工作:

(1)从spsr恢复cpsr

(2)从lr恢复pc

注意:这些操作必须在ARM状态执行

TIPS:
(1)异常向量表中除了FIQ中断都是4个字节,所以只够存放一段异常处理程序的代码的首地址

(2)FIQ中断为快速中断,其中一个特殊的地方就体现在他的异常向量表(Vector Table)地址在最后一个,所以它可以存放不止4个字节,这样的话FIQ中断可以不用只存放地址,而是把整个异常处理程序放进去,这样就少跳转了一次,加快了中断相应速度。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    程序状态寄存器,EPSR异常程序状态寄存器;APSR记录程序计算状态条件,IPSR用来记录当前中断服务程序的异常类型编号,EPSR用于THUMB状态位,IT位,ICT位等; PRIMASK:用于......
    )        模式切换:将CPSR模式位强制设置为与异常类型相对应的值,同时处理器进入到ARM执行模式,禁止所有IRQ中断,当进入FIQ快速中断模式时禁止FIQ中断; (以按键中断为例,将CPSR的......
    始查表做相应的处理 /****************************************************** ;当一个异常出现以后,ARM会自动执行以下几个步骤:;1.把下一条指令的地址放到连接寄存器LR(通常是R14).---保存位置;2.将相应的CPSR(当前......
    PLC 开关量输出接口有哪几种类型?各有什么特点?;工业生产和科技的发展都离不开PLC的自动化控制,PLC可以广义的理解为:集中的继电器延伸控制柜,实际的生产应用中,PLC大大......
    四、ARM 异常处理;4.1 模式与异常 当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断。在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序 。 异常的类型......
    机等其他设备进行信息交换; (5)电源。 3、 PLC 开关量输出接口有哪几种类型?各有什么特点? 晶闸管输出型:一般情况下,只能带交流负载,响应速度快,动作频率高; 晶体管输出型:一般情况下,只能......
    。     3、PLC开关量输出接口有哪几种类型?各有什么特点? 晶闸管输出型:一般情况下,只能带交流负载,响应速度快,动作频率高; 晶体管输出型:一般情况下,只能带直流负载,响应速度快,动作频率高; 继电......
    /O接口:PLC与工业生产现场被控对象之间的连接部件,用来接受被控设备的信号和输出程序的执行结果; 4)通信接口:通过通信接口与监视器、打印机等其他设备进行信息交换; 5)电源。 3、PLC开关量输出接口有哪几种类型......
    通信接口与监视器、打印机等其他设备进行信息交换; (5)电源。 3、 PLC 开关量输出接口有哪几种类型?各有什么特点?  晶闸管输出型:一般情况下,只能带交流负载,响应速度快,动作频率高; 晶体管输出型:一般......
    通信接口与监视器、打印机等其他设备进行信息交换; (5)电源。 3、 PLC 开关量输出接口有哪几种类型?各有什么特点?  晶闸管输出型:一般情况下,只能带交流负载,响应速度快,动作频率高; 晶体管输出型:一般......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>