一文教你搞清楚ARM cortex-m3内核的寄存器; 本文以ARM的 ARM的寄存器分为通用寄存器和特殊功能寄存器,从 寄存器 这个程序程序为直接将 程序状态寄存器( 从 Cortex™-M3 Technical Reference Manual ↩︎
1 前言
Cortex-M3内核为例,对于ARM的内核寄存器做一个简单的介绍,并且市面上Cortex-M3比较容易可以买到,可以结合实践加深对ARM汇编的理解。2 寄存器全览
R0—R15,其中,R0–R12都是32位通用寄存器,用于数据操作。绝大多数16位Thumb指令只能访问R0–R7,而32 位Thumb-2 指令可以访问所有寄存器1。 具体如下图所示;
下图是在Keil MDK的调试环境下的寄存器列表,如下所示;
3 SP
Stack Pointer (SP),栈指针寄存器,该寄存器始终保存着一个指向栈顶的值,值得注意的地方;
SP寄存器的Bit[1:0](最低两位)始终为0,因此这个寄存器是按照字对齐的,也就是四个字节;M3有两个堆栈指针,并且同一时刻只能使用其中的一个;
MSP/SP_main):复位后默认使用的堆栈指针寄存器,用于操作系统内核以及异常处理例程(包括中断服务例程);PSP/SP_process):由用户的应用程序代码使用。R13通常被用作堆栈指针寄存器,另外究竟使用哪个寄存器,由CPU的控制寄存器来决定;
SP_main;SP_main 或 SP_process;CPU的Configuration Control Register,如下图所示;

其中Bit[0]:NONEBASETHRDENA决定了CPU使用哪一种模式;4 LR
Link Register (LR),连接寄存器,即在调用子程序的时候,可以将当前的程序地址存入LR寄存器,这样就方便了函数的返回;
通常LR会配合BL和BLX来使用,下面简单举一个函数调用的例子; BL func01 BL func02 B . func01 MOV R5, #05 BX LR func02 MOV R6, #06 BX LR 5 PC
Program Counter(PC),程序计数寄存器,这个寄存器的Bit [0]始终为0,所以指令的对齐方式是按照四个字节(一个字)或者两个字节(半字)来对齐的。 LDR LR, =func01 LDR PC, =func03 B . func01 MOV R5, #05 BX LR func02 MOV R6, #06 BX LR func03 MOV R7, #07 MOV R8, #08 BX LR func03标签的地址装载到PC寄存器,因此程序会直接跳转到func03,因为之前将func01装载到LR寄存器,因此最终会调用函数func01。6 PSR
Program Status Register),记录 ALU 标志(0 标志,进位标志,负数标志,溢出标志),执行状态,以及当前正服务的中断号,整体如下图所示;

7 中断屏蔽寄存器
NMI);8 总结
cortex-m3内核对ARM架构的寄存器进行初步的了解,包括有哪些寄存器,以及这些寄存器的作用,配合简单的代码,从而加深理解,另外由于笔者能力有限,文中难免存在错误和纰漏,望大佬不吝赐教。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)