[转]arm工作模式
从编程的角度看,arm微处理器的工作状态有两种,并可在两种状态之间切换:
(1) arm状态,此时处理器执行32位的字对齐的arm指令
(2) thumb状态,此时处理器执行16位的,半字对齐的thumb指令(为了兼容老芯片)
在程序运行的过程中,可以在两种状态之间进行相应的转换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。
存储器格式(字对齐):
Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字节到第七个字节放置第二个存储的字数据,一次排列。作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。
======================================================
总结:高高低低x86 小端
存储器格式:
Arm体系结构可以用两种方法存储字数据,称之为大端格式和小端格式。
大端格式:字数据的高字节存储在低地址中,而字数据的低地址存放在高地址中。
小端格式:与大段格式相反。
指令长度:
Arm微处理器的指令长度是32位的,也可以为16位(thumb状态下)。Arm微处理器中支持字节(8位),半字(16位),字(32位)三种数据类型,其中,字需要4字节对齐,半字需要2字节对齐。
注:所谓的指令长度是一条完整的指令的长度,而不是单纯的mov这3个字母长度
Arm的工作模式切换有两种方法:
被动切换:在arm运行的时候产生一些异常或者中断来经行模式切换
主动切换:通过软件改变,即软件设置寄存器来经行arm的模式切换,应为arm的工作模式都是可以通过相应寄存器的赋值来切换的。
Tips:当处理器运行在用户模式下,某些被保护的系统资源是不能被访问的。
=====================================================================
工作模式的分类:
除了用户模式以为,其余所有6种模式称之为非用户模式(特权模式,权限比用户模式高),其中特权模式中除去系统模式外的5种模式称之为异常模式(在用户模式和系统模式看来这些都属于异常),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
如表所示:
处理器工作模式 |
特权模式 |
异常模式 |
说明 |
用户(user)模式 |
|
|
用户程序运行模式 |
系统(system)模式 |
该组模式下可以任意访问系统资源 |
|
运行特权级的操作系统任务 |
一般中断(IRQ)模式 |
通常由系统异常状态切换进该组模式 |
普通中断模式 |
|
快速中断(FIQ)模式 |
快速中断模式 |
||
管理(supervisor)模式 |
提供操作系统使用的一种保护模式,swi命令状态 |
||
中止(abort)模式 |
虚拟内存管理和内存数据访问保护 |
||
未定义指令终止(undefined)模式 |
支持通过软件仿真硬件的协处理 |
CPU的模式可以简单的理解为当前CPU的工作状态,比如:当前操作系统正在执行用户程序,那么当前CPU工作在用户模式,这时网卡上有数据到达,产生中断信号,CPU自动切换到一般中断模式下处理网卡数据(普通应用程序没有权限直接访问硬件),处理完网卡数据,返回到用户模式下继续执行用户程序。
特权模式
除用户模式外,其它模式均为特权模式(Privileged Modes)。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。
异常模式
特权模式中除系统(system)模式之外的其他5种 模式又统称为异常模式。它们除了可以通过在特权下的程序切换进入外,也可以由特定的异常进入。比如硬件产生中断信号进入中断异常模式,读取没有权限数据进 入中止异常模式,执行未定义指令时进入未定义指令中止异常模式。其中管理模式也称为超级用户模式,是为操作系统提供软中断的特有模式,正是由于有了软中 断,用户程序才可以通过系统调用切换到管理模式。
(1)用户模式:
用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。
(2)系统模式:
系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
(3)一般中断模式:
一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。
(4)快速中断模式:
快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。
(5)管理模式:
管理模式是CPU上电后默认模式,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式。
(6)终止模式:
中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。
(7)未定义模式:
未定义模式用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。
===============================================================
31 |
30 |
29 |
28 |
27 |
~ |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|||
N |
Z |
C |
V |
保留 |
I |
F |
T |
M4 |
M3 |
M2 |
M1 |
M0 |
|||||
N |
Negative/Less Than |
I |
IRQ disable |
||||||||||||||
Z |
Zero |
F |
FIQ disable |
||||||||||||||
C |
Carry/Borrow/Extend |
T |
State bit |
||||||||||||||
V |
Overflow |
M0~4 |
Mode bits |
|
1、条件码标志
N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。条件码标志各位的具体含义如下表所示:
标志位 |
含 义 |
|
N |
当用两个补码表示的带符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果为正数或零 |
|
Z |
Z=1表示运算的结果为零,Z=0表示运算的结果非零。 |
|
C |
可以有4种方法设置C的值: |
|
-加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。 |
||
-减法运算(包括CMP):当运算时产生了借位时(无符号数溢出),C=0,否则C=1。 |
||
-对于包含移位操作的非加/减运算指令,C为移出值的最后一位。 |
||
-对于其它的非加/减运算指令,C的值通常不会改变。 |
||
V |
可以有2种方法设置V的值: |
|
-对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出 |
||
-对于其它的非加/减运算指令,V的值通常不会改变。 |
||
Q |
在ARM V5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其它版本的处理器中,Q标志位无定义 |
|
在ARM状态下,绝大多数的指令都是有条件执行的;在THUMB状态下,仅有分支指令是条件执行的。
2、控制位
CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行于特权模式时,这些位也可以由程序修改。
·中断禁止位I、F:置1时,禁止IRQ中断和FIQ中断。
·T标志位:该位反映处理器的运行状态。当该位为1时,程序运行于THUMB状态,否则运行于ARM状态。该信号反映在外部引脚TBIT上。在程序中不得修改CPSR中的TBIT位,否则处理器工作状态不能确定。
·运行模式位M[4:0]:这几位是模式位,这些位决定了处理器的运行模式。具体含义如下表所示:
·保留位:CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要用保留位存储数据。保留位将用于ARM版本的扩展。
M[4:0] |
处理器模式 |
ARM模式可访问的寄存器 |
THUMB模式可访问的寄存器 |
0b10000 |
用户模式 |
PC,CPSR,R0~R14 |
PC,CPSR,R0~R7,LR,SP |
0b10001 |
FIQ模式 |
PC,CPSR,SPSR_fiq,R14_fiq~R8_fiq,R0~R7 |
PC,CPSR,SPSR_fiq,LR_fiq,SP_fiq,R0~R7 |
0b10010 |
IRQ模式 |
PC,CPSR,SPSR_irq,R14_irq~R13_irq,R0~R12 |
PC,CPSR,SPSR_irq,LR_irq,SP_irq,R0~R7 |
0b10011 |
管理模式 |
PC,CPSR,SPSR_svc,R14_svc~R13_svc,R0~R12 |
PC,CPSR,SPSR_svc,LR_svc,SP_svc,R0~R7 |
0b10111 |
中止模式 |
PC,CPSR,SPSR_abt,R14_abt~R13_abt,R0~R12 |
PC,CPSR,SPSR_abt,LR_abt,SP_abt,R0~R7 |
0b11011 |
未定义模式 |
PC,CPSR,SPSR_und,R14_und~R13_und,R0~R12 |
PC,CPSR,SPSR_und,LR_und,SP_und,R0~R7 |
0b11111 |
系统模式 |
PC,CPSR,R0~R14 |
PC,CPSR,LR,SP,R0~R74 |