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