Cortex-M3寄存器组

kelly的头像
kelly 发布于:周二, 08/02/2016 - 10:35 ,关键词:

1、通用目的寄存器R0~R7

R0-R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后的初始值是不可预料的。

2、通用目的寄存器 R8-R12

R8-R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, 32 位的thumb-2 指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的。

3、特殊功能寄存器

程序状态寄存器:APSR, IPSR, EPSR ---- MRS/MSR

APSR:

N:负条件码标志位,运算结果小于0,N=1, 大于等于0,N=0;

Z:零条件码标志位,运算结果为0,Z=1;

C:进位条件码标志位,运算指令产生进位(无符号加法溢出),C=1;

V:溢出条件码标志位,运算溢出(有符号加法溢出), V=1;

Q:饱和条件码标志位;

IPSR:处于线程模式时,该位域为0;在手柄模式下,该位域为当前异常的异常号。

EPSR:

T:Thumb状态, T=1,ARM状态,T=0;

PRIMASK, FAULTMASK 和 BASEPRI:控制异常的使能和除能

控制寄存器CONTROL:其一用于定义特权级别,其二用于选择当前使用哪个堆栈指针。

4、堆栈指针R13

R13 是堆栈指针。在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈。当引用 R13(或写作 SP)时,引用到的是当前正在使用的那一个,另一个必须用特殊的指令来访问( MRS,MSR指令)。

主堆栈指针(MSP),或写作 SP_main。这是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。
进程堆栈指针(PSP),或写作 SP_process。用于常规的应用程序代码(不处于异常服用例程中时)。

5、连接寄存器R14

R14 是连接寄存器( LR)。在一个汇编程序中,你可以把它写作 both LR 和 R14。 LR 用于在调用子程序时存储返回地址。例如,当你在使用 BL(分支并连接, Branch and Link)指令时,就自动填充 LR的值。

6、程序计数器R15

R15 是程序计数器,在汇编代码中一般我们都都叫它的外号“ PC”。因为 CM3 内部使用了指令流水线,读 PC 时返回的值是当前指令的地址+4。

文章来源:CSDN博客

围观 28
1442