Cortex-M4
为
32
位处理器内核。该处理器包含以下
32
位寄存器:
13
个通用寄存器(
r0-r12
)
堆栈指针(
SP
),别名为
“banked”
寄存器。主堆栈指针
SP_main
和进
程堆栈指针
SP_process
。
连接寄存器
LR
(
r14
)
程序计数寄存器
(PC), r15
特殊功能程序状态寄存器(
xPSR
)
下图给出了
Cortex-M4
处理器的寄存器组:
图
Cortex-M4
处理器的寄存器组
1.
R0
‐
R12
是最具
“通用目的”的
32
位通用寄存器,用于数据操作。
大
部分能够访问通用寄存器的指令都可以访问
r0-r12
。其中:
低组寄存器(
r0-r7
)能够被所有访问通用寄存器的指令访问。
高组寄存器(
r8-r12
)能够被所有
32
位通用寄存器指令访问,而
不能被所有的
16
位指令访问。
2.
寄存器
r13
、
r14
和
r15
具有以下特殊功能:
堆栈指针——寄存器
r13
被用作堆栈指针(
SP
)。堆栈指针用于
访问堆栈,因为
SP
忽略写入到
[1:0]
位(即最低两位永远是
0
),
则堆栈是按照字对齐(
4
个字节对齐)。
主堆栈指针
SP_main
是复位后缺省使用的堆栈指针,
用于操作
系统内核以及异常处理例程(包括中断服务例程)。“
Handler
”
模式总是使用
SP_main
主堆栈指针,
但是你也可以配置成
“
Thread
”
模式来使用
SP_main
主堆栈指针或者
SP_process
进程堆栈指针。
连接寄存器——寄存器
r14
为子程序连接寄存器(
LR
)。当一个
Branch and Link (BL)
或
Branch and Link with Exchange (BLX)
指
令被执行后,
LR
从
PC
获取返回地址。
LR
也被用于异常返回。
在其他情况下,你可以把
r14
当做一个通用寄存器。
程序计数寄存器——寄存器
r15
是
程序计数寄存器(
PC
)。指向
当前的程序地址。如果修改它的值,就能改变程序的执行流(很
多高级技巧隐藏其中)。该寄存器的
[0]
位永远为
0
,
则指令总
是按照字对齐或者半字对齐。
在
“
ARMv7-M Architecture Reference Manual
”
可获取更多信息。