Advertisement

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,在子程序间的连接代码中常有这种使用规则

全部评论 (0)

还没有任何评论哟~