第一章

Thumb指令是将ARM指令集的一个子集重新编码而形成的一个 指令集,arm指令长度为32位, Thumb指令长度位为16位。
支持Thumb指令的arm体系版本,使用字符T来表示。
目前Thumb指令集具有一下两个版本:
Thumb 指令集版本1 用于arm体系版本4的T变种
Thumb 指令集版本2用于arm体系版本5的变种

第一章

第一章
第一章
r0~r7任何模式下同一个物理寄存器不存在备份, 不用于特殊用途
r8~r12 对应两个不同的物理寄存器在快速终端模式下r8记作r8_ fiq;用户模式下记作r8_usr仅仅使用这几个寄存器时, fiq处理程序不保存和恢复中断现场的指令
r13~r14,分别对应6个不同的物理寄存器, 其中的一个是用户模式和系统模式共用的; 另外的5个对应于其他5种处理器模式;分别为R13_<<wbr>mode>:mode对应usr、svc、abt、und、 irq、fiq。
习惯将r13用作栈指针;

寄存器R13(也称为堆栈指针或SP)有6个分组的物理寄存器,见表2-1。一个用于用户和系统模式,其余5个分别用于5种异常模式。

寄存器R13通常作为堆栈指针SP。在ARM指令集中,R13大都用在对各个模式下的堆栈操作。每个异常模式都具备私有的R13寄存器,它通常指向由异常模式所专用的堆栈。在入口处,通常将寄存器值保存到这个堆栈。在模式转换前将当前寄存器的值保存到堆栈中,然后从将要切换的模式堆栈中将这些值从堆栈重装到已切换的模式寄存器中,这种处理方法可确保异常发生时的程序状态不会被破坏。


3、链接寄存器 R14

寄存器R14(也称为链接寄存器或LR)有6个分组的物理寄存器,见表2-1。一个用于用户和系统模式,其余5个分别用于5种异常模式,对应的私有寄存器有R14_svc,R14_irq,R14_fiq,R14_abt和R14_und。寄存器R14有三种用途:

☆ 当发生异常时,它被设置为该异常返回地址;

☆ 在执行分支和链接(BL)指令时,它用于保存子程序的返回地址;

☆ 而在其他时候,可以作为一个通用寄存器来对待。

第一章
r15:程序计数器又被记作pc,一般不用做通用寄存器;
PC一般指向地址上连续的下面第二条指令,所以对ARM状态来说,就是当前指令的地址+8;对thumb来说,就是+4。因为ARM指令以字为边界,所以写入R15值的bit[1:0]通常为0b00。


 
 

5、CPSR和SPSR
CPSR:当前程序状态寄存器
SPSR:备份程序状态寄存器

所有模式共享一个程序状态寄存器CPSR。在异常模式中, 程序状态保存寄存器SPSR可以被访问, 每种异常具有自己私有的SPSR。在进入异常时, 它保存CPSR的当前值;在异常退出时,可通过它(SPSR) 恢复CPSR。
CPSR:
第一章
第一章
第一章
第一章
ARM体系中通常有3中方式控制程序的执行流程
1.正常程序流程:每执行一条arm指令,pc的值加4(执行当前执行指令的下两条指令),每执行一条thumb指令,pc的值加2;顺序执行

2、通过跳转指令:
b 指令用于执行跳转操作;
bl 跳转同时保存子程序的返回地址
bx 跳转同时根据pc的值确定是否将程序切换到thumb状态
blx 执行上面3个

3、异常中断发生时,系统执行完当前指令后将跳转到相应的异常中断

arm中异常中断:
第一章
第一章
arm处理器对异常中断的响应过程:
1、保存处理器当前状态cpsr,即将cpsr各位保存到相应中断对应的spsr寄存器
2、设置cpsr相应位及,使处理器进入相应的执行模式、禁止irq中断,当是进入fiq模式是,禁止fiq中断。
3、将寄存器Ir_mode 设置成返回地址
4、将pc值设置成异常中断向量地址,从而跳转到相应的异常中断处理程序处执行

下面用伪代码来描述:
R14_ = Return Link
  SPSR_ = CPSR
  CPSR[4:0] = Exception Mode Number
  CPSR[5] = 0 ;当允许于arm指令状态时
  If == Reset or FIQ then
  CPSR[6] = 1 ;当响应FIQ或复位异常时,禁止新的FIQ中断
  CPSR[7] = 1 ;禁止IRQ中断
  PC = Exception Vector Address


 异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:


●由链接寄存器LR的值恢复PC,返回到发生异常中断的指令的下一条指令处执行程序。
●将SPSR复制回CPSR中。
●若在进入异常处理时设置了中断禁止位,要在此清除。



  复位系统后,开始整个异常应用程序的执行,因此,复位异常处理程序不需要返回。




1.7.1arm体系存储空间
arm体系的地址空间为2^32个8位字节,而arm是字对齐处理,所以可以看成2^30个32为的字;地址为A的字数据包括A/A+1/A+2/A+3 4个字节的内容
这就是为什么写入R15值的bit[1:0]通常为0b00。

arm存储器格式:(4个字节那边是高那边是低)格式如下
第一章

1.7.3非对齐的存储访问操作:
第一章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值