ARM上的异常处理和简单汇编

这篇笔记主要介绍了ARM处理器的7个工作模式,包括用户模式、FIQ、IRQ、SVC等,并详细讲解了异常处理机制,如异常产生时的处理、异常返回流程。此外,还提及了ARM汇编的基本格式和一些常用指令,如PC、LR、R12、R13等寄存器的用途。

今天看了《ARM嵌入式系统结构与编程》,着重看了关于ARM上的异常处理,简单的把书上我感兴趣的异常和ARM汇编做了一些笔记,以供下次忘了的时候,可以看看。

ARM处理器有7种工作模式:

1,用户模式

2,FIQ模式:快速中断模式

3,IRQ模式:

4,SVC模式

5,中止模式

6,未定义指令异常模式

7系统模式,

ARM有31个通用寄存器,6个状态寄存器,都是32位,其中状态寄存器只用到了其中的14位,可以从网上搜作ARM物理寄存器来产看寄存器的信息。下面简单介绍下几个寄存器的专有用途:

R15:PC寄存器,一直存放当前指令的下两条指令地址,比如当前指令地址是ADDR,则PC=ADDR+8

R12:中间结果保存寄存器,R12一般在子程序连接代码中使用,作为子程序中间结果寄存器

R13:栈指针,也就是SP

R14,称作LR,ARM上有以下两种用途:

1,每种处理器模式的R14上存放当前子程序的返回地址,通过BL或者BLX调用子程序时,R14设置成该程序返回地址,在子程序里,把R14值返回赋值给PC,实现子程序返回,汇编形式如:

MOV PC, LR或者 BX LR

2,发生异常时,R14设置成异常模式返回的地址。

 

ARM状态寄存器有CPSR(当前程序状态寄存器)和SPSR(程序状态备份寄存器),CPSR任何模式可用,SPSR每种异常模式专用,发生某种异常时,SPSR存放当前状态寄存器内容,当异常返回时,用SPSR恢复CPSR。

ARM异常有7种,每种都有不同优先级,其中复位优先级最高,其次是FIQ中断,下面简单说下异常产生和返回时的ARM做的一些工作:

异常产生:

1,将引起异常指令的下一条指令地址保存到新的异常模式的LR中,保证异常结束时可以正常返回。

2,CPSR值赋给SPSR

3,根据异常类型将CPSR模式控制位强制设置成异常所对应的模式值。

4,强制PC指向相应的异常向量地址。

 

异常返回:

ARM中的异常除了复位异常,其他异常都需要返回,以下简单说下各种异常模式返回时候PC值设定。

1,从SWI和未定义指令返回:异常由指令本身引起,因此内核在计算LR时PC没有更新,因此返回指令为:

MOVS PC,LR

 

2,从FIQ,IRQ和预取异常返回:异常在当前指令执行完成时才被相应,因此内核计算LR时候PC已经被更新,因此返回指令是:

SUBS PC,LR,#4

也就是将LR中内容减4(上移一条指令),送入PC实现异常返回,流程如下;

指令1: pc-12   //异常在此指令执行期间发生

指令2: pc-8    //正常来说异常返回时,要到这个地址

指令3:pc-4  //LR

指令4: pc

 

3,从数据异常返回:异常在当前指令执行时候产生并被响应,LR已经更新,但是由于数据异常,指令不能得到正常执行,程序返回时应返回产生异常的指令,重新取址,译码,执行。因此返回指令是

SUBS PC,LR,#8

 

ARM汇编基本格式:

<opcode>{<cond>}{S}<Rd>,<Rn>,<operand2> 

opcode:指令操作码:mov

cond:指令执行条件码头:如EQ(相等,即Z=1),PL(非负数,N=0),这个是可选的

S:决定指令的操作结果是否影响CPSR 

Rd:目标寄存器

Rn:第一个操作数

operand:第二个操作数

比如 1,SUBS PC,LR,#8

2,MOV R0,R0,LSL #n  R0内容左移n位,存入R0。

3,LDR R0,[R1,#4]  //R0<-[R1+4] R1内容加4值指向的内存内容给R0,前变址法

4,LDR R0,[R1,#4]! //R0<-[R1+4] 并且R1<-R1+4

5,LDR R0,[R1],#4 //R0<-[R1]并且R1<-R1+4 ,后变址法

 

来自书籍: 《ARM嵌入式系统结构与编程》,邱铁编著。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值