Cortex-M架构中堆栈的后进先出LIFO

先看一下我们要用到的一些指令的简单说明:

  • PUSH为入栈命令
  • POP为出栈命令
  • MOV数据传送指令,将一个寄存器中的值移到另一个寄存器

首先定义一个TEST_LIFO子函数

在这里我给R0 R1 R2分别赋值1,2, 3

TEST_LIFO	FUNCTION
	PUSH 	        {R0}
	PUSH	        {R1}
	PUSH	        {R2}
	MOV		R0, #1;给R0 R1 R2赋值1 2 3
	MOV		R1, #2
	MOV		R2, #3
	POP		{R2}
	POP		{R1}
	POP		{R0}
	BX		LR
	ENDFUNC

 

为了方便对比,我们在系统启动时给R0,R1,R2赋值5,6,7

然后跳转到TEST_LIFO

Reset_Handler    PROC
     EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     IMPORT  SystemInit
				
				 MOV	 R0, #5
				 MOV	 R1, #6
				 MOV	 R2, #7
				 BL	 TEST_LIFO

 

然后我们执行看一下,执行三步后,我们可以看到R0-R2都已经被赋值了567

 

继续往下执行堆栈,可以看到123已经入栈成功了

 

再往下执行三步,可以看到出栈成功了,出栈的顺序是R2-R1-R0

 

物联沃分享整理
物联沃-IOTWORD物联网 » Cortex-M架构中堆栈的后进先出LIFO

发表评论