ARM 架构

数据和指令类型

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

  • 大部分ARM core 提供:
    ARM 指令集(32-bit)
    Thumb 指令集(T变种)(16-bit )

  • Jazelle cores 支持 Java bytecode(J变种,4TEJ)

处理器工作模式

ARM 有7个基本工作模式:

  • User:非特权模式,大部分任务执行在这种模式
    正常程序执行的模式
  • FIQ:当一个高优先级(fast)中断产生时将会进入这种模式
    (FAST INTERRUPT RQUEST)高速数据传输和通道处理
  • IRQ:当一个低优先级(normal)中断产生时将会进入这种模式
    通常的中断处理
  • Supervisor:当复位或软中断指令执行时将会进入这种模式
    供操作系统使用的一种保护模式
  • Abort: 当存取异常时将会进入这种模式
    虚拟存储及存储保护
  • Undef: 当执行未定义指令时会进入这种模式
    软件仿真硬件协处理器
  • System: 使用和User模式相同寄存器集的特权模式
    特权级的操作系统任务

寄存器

ARM 架构_第1张图片
寄存器
ARM 架构_第2张图片
寄存器组织概要
  • CPSR 程序状态寄存器

ARM 架构_第3张图片
cpsr
  • SPSR(saved program status register)

用于保存CPSR(current program status register)的值,以便异常返回后恢复异常发生时的工作状态。

  • r13 (the stack pointer, sp)

  • r14 (the link register, lr)

  • r15 ( the program counter, pc) 程序指针

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

    2. 当处理器执行在Thumb状态:
      所有指令 16 bits 宽
      所有指令必须 halfword 对齐(能被2整除)
      所以 pc值由bits [31:1]决定, bits [0] 未定义 (所以指令不能 byte对齐).

    3. 当处理器执行在Jazelle状态:
      所有指令 8 bits 宽
      处理器执行 word 存取一次取4条指令

    4. PC(R15)的值等于当前正在执行的指令地址+8.

异常处理

ARM 架构_第4张图片
异常处理
ARM 架构_第5张图片
异常向量表

字节顺序

  • 大端:位地址存储数据的字节,位地址存储数据的字节
  • 小端:位地址存储数据的字节,位地址存储数据的字节
ARM 架构_第6张图片
Paste_Image.png
  • 如何判断系统是大端还是小端?
bool IsBigEndian()
{
    int value = 0x1234;
    char lowaddress = *(char*)&value;
    if(lowaddress == 0x12)
    {
            return true;
    }
    return false;
}

你可能感兴趣的:(ARM 架构)