今天看了《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嵌入式系统结构与编程》,邱铁编著。
这篇笔记主要介绍了ARM处理器的7个工作模式,包括用户模式、FIQ、IRQ、SVC等,并详细讲解了异常处理机制,如异常产生时的处理、异常返回流程。此外,还提及了ARM汇编的基本格式和一些常用指令,如PC、LR、R12、R13等寄存器的用途。

322

被折叠的 条评论
为什么被折叠?



