ARM基础知识(一)
一、ARM处理器的两种工作状态:
1、ARM状态:32位,ARM状态执行字对齐的32位ARM指令。
2、Thumb状态,16位,执行半字对齐的16位3、用Bx Rn指令来进行两种状态的切换: 其中Bx是跳转指令,而Rn是寄存器(1个字,32位),如果Rn的位0为1,则进入Thumb状态;如果Rn的位为0,这进入ARM状态。(原 因:ARM指令的后两位始终为0,没有用,而Thumb指令的后一位始终为0,没有用,因此采用位0来表示ARM指令与Thumb指令的切换标志位。)注:1、ARM和Thumb两种状态之间的切换不影响处理器的工作模式和寄存器的内容。
2、ARM处理器在处理异常时,不过处理器处于什么状态,则都将切换到ARM状态。(**********)
二、ARM处理器的7种模式:
1、用户模式
2、系统模式 说明:用户模式与系统模式两者使用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状态寄存器),但系统模式比用户模式有更高的权限。
3、快中断模式(Fast Interrupt Request)
4、一般中断模式(IRQ)
5、管理模式(Supervisor,SVC) 说明:系统复位或开机时则进入到SVC模式下
6、中止(abort) 说明:当遇到软中断(SWI,Software Interrupt)时,也将进入到SVC模式下
7、未定义(undefine)
说明:1、用户模式外,其它6种模式称为特权模式。所谓特权模式,即具有如下权利:a.MRS(把状态寄存器的内容放到通用寄存 器);b.MSR(把通用寄存器的内容放到状态寄存器中)。由于状态寄存器中的内容不能够改变,因此要先把内容复制到通用寄存器中,然后修改通用寄存器中 的内容,再把通用寄存器中的内容复制给状态寄存器中即可完成“修改状态寄存器”的任务。2、剩下的六种模式中除去系统模式外,统称为异常模式。
ARM处理器的7种工作模式
| 处理器工作模式 | 说 明 | ||
|---|---|---|---|
| 用户(user,usr)模式 | 正常程序运行模式 | ||
| 快速中断(FIQ,fiq)模式 | 异常模式 | 特权模式privileged modes | 快速中断处理 |
| 外部中断(IRQ,irq)模式 | 普通中断处理 | ||
| 超级用户(supervisor,svc)模式 | 提供操作系统使用的一种保护模式,swi命令状态 | ||
| 数据访问终止(abort,abt)模式 | 用于虚拟存储和存储保护 | ||
| 未定义指令终止(undefined,und)模式 | 用于支持通过软件仿真硬件的协处理 | ||
| 系统(system,sys)模式 | 用于运行特权级的操作系统任务 |
三、ARM指令中有37个寄存器,有31个通用寄存器和6个状态寄存器。 原因:系统模式和用户模式共享相同的寄存器。用户、系统模式没有“保存的程序状态寄存器(SPSR)”,而其他5种模式分别有一个对应的“保存的状态寄存 器(SPSR)”,即共五个SPSR,七个模式共用一个“当时程序状态寄存器(CPSR)”,即共六个状态寄存器,还有31个通用寄存器。
ARM处理器各种工作模式下的寄存器
| usr模式 | sys模式 | svc模式 | abt模式 | und模式 | irq模式 | fiq模式 |
|---|---|---|---|---|---|---|
| R0 | R0 | R0 | R0 | R0 | R0 | R0 |
| R1 | R1 | R1 | R1 | R1 | R1 | R1 |
| R2 | R2 | R2 | R2 | R2 | R2 | R2 |
| R3 | R3 | R3 | R3 | R3 | R3 | R3 |
| R4 | R4 | R4 | R4 | R4 | R4 | R4 |
| R5 | R5 | R5 | R5 | R5 | R5 | R5 |
| R6 | R6 | R6 | R6 | R6 | R6 | R6 |
| R7 | R7 | R7 | R7 | R7 | R7 | R7 |
| R8 | R8 | R8 | R8 | R8 | R8 | R8_fiq |
| R9 | R9 | R9 | R9 | R9 | R9 | R9_fiq |
| R10 | R10 | R10 | R10 | R10 | R10 | R10_fiq |
| R11 | R11 | R11 | R11 | R11 | R11 | R11_fiq |
| R12 | R12 | R12 | R12 | R12 | R12 | R12_fiq |
| R13 | R13 | R13_svc | R13_abt | R13_und | R13_irq | R13_fiq |
| R14 | R14 | R14_svc | R14_abt | R14_und | R14_irq | R14_fiq |
| PC | PC | PC | PC | PC | PC | PC |
| CPSR | CPSR | CPSR | CPSR | CPSR | CPSR | CPSR |
| SPSR_svc | SPSR_abt | SPSR_und | SPSR_irq | SPSR_fiq |
说明:
² ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括31个通用寄存器和6个状态寄存器,其中通用寄存器包括程序计数器(PC指针)及所有寄存器(均为32位)。
² ARM处理器中有用户模式、系统模式、特权模式、数据访问终止模式、未定义指令终止模式、IRQ中断模式、FIQ中断模式7种工作模式,每种工作模式都有R0~R15及CPSR共17个通用寄存器,而在5种异常中断(exception)模式中又各自拥有一个独立的SPSR寄存器用于存放当前状态寄存器的值。这些通用寄存器对于各种工作模式或部分工作模式有些是公用的,如表7-2所示。
² R8R12对于快速中断FIQ模式之外的其他模式都是公用的,而FIQ模式另外有一套自己寄存器R8_fiqR12_fiq,这样是为了在处理FIQ中断时不必保护R8~R12寄存器,从而提高响应速度。
² R13和R14除了用户模式和系统模式公用外,其他每种异常模式都有一套自己独立的寄存器:R13_svc、R14_svc/R13_abt、R14_abt/R13_und、R14_und/R13_irq、R14_irq/R13_fiq、R14_fiq,即R13和R14有6套物理寄存器实现。
² R13/sp寄存器在ARM中除了可用作通用寄存器外还用作堆栈指针sp,而且每一种异常(exception)模式都有自己独立的R13物理寄存器实现。在子程序中R13只能用作sp,sp在进入子程序的值和退出子程序的值必须相等。
² R14/lr寄存器在ARM中除了可以用作通用寄存器外,还可用作连接寄存器lr,用来保存子程序的返回地址,如果子程序保存了返回地址,R14也可以用作其他用途。每一种异常(exception)模式都有自己独立的R14/lr物理寄存器实现。
² R15寄存器在ARM中用作程序计数器pc,虽然R15也可以用作通用寄存器,但要注意有一些特殊限制,如果违反了这些限制,指令执行的结果将是不可预料的。
² 子程序通过寄存器R0R3来传递参数,这时,R0R3可以记作A1~A4。如果参数超过4个,可以将剩余的参数送到数据栈中,入栈的顺序与参数的顺序相反,即最后一个参数先入栈。
² 在子程序中用R4R11来保存局部变量,这时,R4R11可以记作V1V8;而在Thumb程序中,通常只能使用寄存器R4R7。
² 寄存器R12用作子程序间的scratch寄存器,记作ip,在子程序间的连接代码中常有这种使用规则
