ARM汇编基础之内核寄存器详解

   日期:2020-05-26     浏览:195    评论:0    
核心提示:一文教你搞清楚ARM cortex-m3内核的寄存器嵌入式

一文教你搞清楚ARM cortex-m3内核的寄存器;

文章目录

    • 1 前言
    • 2 寄存器全览
    • 3 SP
    • 4 LR
    • 5 PC
    • 6 PSR
    • 7 中断屏蔽寄存器
    • 8 总结

1 前言

本文以ARM的Cortex-M3内核为例,对于ARM的内核寄存器做一个简单的介绍,并且市面上Cortex-M3比较容易可以买到,可以结合实践加深对ARM汇编的理解。

2 寄存器全览

ARM的寄存器分为通用寄存器和特殊功能寄存器,从R0R15,其中,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的控制寄存器来决定;

  • Handler mode :即系统发生异常(中断等)的情况会进入该模式,通常使用SP_main
  • Thread mode:用户程序正常运行时处于该模式,可以选择使用SP_mainSP_process

CPUConfiguration Control Register,如下图所示;

其中Bit[0]NONEBASETHRDENA决定了CPU使用哪一种模式;

4 LR

Link Register (LR),连接寄存器,即在调用子程序的时候,可以将当前的程序地址存入LR寄存器,这样就方便了函数的返回;
通常LR会配合BLBLX来使用,下面简单举一个函数调用的例子;

	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 标志,进位标志,负数标志,溢出标志),执行状态,以及当前正服务的中断号,整体如下图所示;

  • APSR:Application PSR;记录 ALU 标志(0 标志,进位标志,负数标志,溢出标志)
  • IPSR: Interrupt PSR;正服务的中断号;
  • EPSR:Execution PSR;执行状态;
  • xPSR:保存状态寄存器;

7 中断屏蔽寄存器

  • BASEPRI:禁止所有优先级不高于某个具体数值的中断;
  • PRIMASK:禁止所有的中断(除了不可屏蔽中断外NMI);
  • FAULTMASK:禁止所有硬件错误导致的硬件上访中断;

8 总结

cortex-m3内核对ARM架构的寄存器进行初步的了解,包括有哪些寄存器,以及这些寄存器的作用,配合简单的代码,从而加深理解,另外由于笔者能力有限,文中难免存在错误和纰漏,望大佬不吝赐教。

  1. Cortex™-M3 Technical Reference Manual ↩︎

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服