ARM基础 四、ARM编程模型

来源:互联网 发布:超次元矩阵闪退 编辑:程序博客网 时间:2024/06/13 14:30

1、 ARM处理器的工作状态

1)从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:

ARM状态:此时处理器执行32位的字对齐的ARM指令;
Thumb状态:此时处理器执行16位的、半字对齐的Thumb指令。
2)Thumb和ARM
大部分ARM core 提供:ARM 指令集(32-bit )、Thumb指令集(16-bit)
3)状态切换方
ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,在开始执行代码时,应该处于ARM状态。
进入Thumb状态

      当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。

切换到ARM状态

      当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。

4)ARM 采用的是32位架构
      ARM 约定:   Byte:8 bits      Halfword:16 bits (2 byte)      Word :32 bits (4 byte)      

                   Doubleword:64-bits(8byte)(Cortex-A处理器)





2、 对齐

存储器访问必须始终适当地保持地址对齐:

1)非对齐地址将产生不可预测的/未定义的结果

2)用‘Data Abort’ 异常来检测无效的非对齐数据存取
3)需要额外的扩展逻辑,或者MMU来实现
4)谨防指令读取时出现非对齐
非对齐数据存取能够完成, 但不是用 LDR:使用 LDRB, STRB 传递字节,或使用LDM 加移位/屏蔽
   








3、字节顺序


测试计算机大小端的方法:








4、处理器工作模式

ARM有7个基本工作模式:

     User(用户模式):非特权模式,ARM处理器正常的程序执行状态,大部分任务执行在这种模式
     FIQ(快中断模式):当一个高优先级(fast)中断产生时将会进入这种模式
     IRQ(中断模式):当一个低优先级(normal)中断产生时将会进入这种模式
     Supervisor(管理模式):当复位或软中断指令执行时将会进入这种模式
     Abort(数据访问终止模式):当存取异常时将会进入这种模式
     Undef(未定义指令中止模式):当执行未定义指令时将会进入这种模式
     System(系统模式):使用和User模式相同寄存器集的特权模式

          ARM的工作模式改变可以由软件改变、也可以由外部中断或者异常处理改变。

          除了usr之外其他模式称为特权模式,除了usr和system其他模式称为异常模式,用于处理中断和异常,或者访问受保护的系统资源等。




5、ARM寄存器

37个寄存器 = 7个未分组寄存器(R0~R7)+  2×(5个分组寄存器R8~R12) + 6×2(R13=SP,R14=lr 分组寄存器) + 1(R15=PC)              + 1(CPSR) + 5(SPSR)

                

    *程序状态寄存器


      
      *程序指针PC
            当处理器执行在ARM状态:1.所有指令 32 bits 宽      2.所有指令必须 word 对齐
          所以 pc值由bits [31:2]决定, bits [1:0] 未定义 (所以指令不能halfword / byte对齐)
0 0