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
