《ARM Cortex-M0权威指南(中文) 高清扫描版.pdf》
<20071230123408_常用ARM指令集及汇编v1.0.12发行>
<cortex_m0_Generic_User_Guide.pdf> (good)

堆栈:处理器使用
满-自减 堆栈(full-descending stack),
堆栈指针指向最后一个入栈单元,且向低地址生长,系统复位后指针寄存器从地址0处装载内容;

PUSH 指令



push 将寄存器中的内容,保存到堆栈指令指向的内存上面。
例子:
比如当前 堆栈指针,指向 0x2000 0284
这个时候寄存器的值:
R0 = 0x1212 1212
R1 = 0x0000 1BC3
R2 = 0x0000 1BC3
R3 = 0x0000 0000
执行指令 PUSH {R0 - R3}
之后,
内存地址:
0x2000 0274的值为: 0x1212 1212 --------- R0
0x2000 0278的值为: 0x0000 1BC3 --------- R1
0x2000 027C的值为: 0x0000 1BC3 --------- R2
0x2000 0280 的值为: 0x0000 0000 --------- R3
执行之后 堆栈指针,指向的地址为: 0x2000 0274
POP 指令



例子:
内存:
0x2000 0294 = 0x1212 1212
0x2000 0298 = 0xEFEF EFEF
0x2000 029C = 0x0000 2079
0x2000 02A0 = 0x0100 0000
这个时候,堆栈指针 指向的地址为:0x2000 0294
那么 执行指令如下:
POP {R0 -R3}
执行之后,
R0 = 0x1212 1212
R1 = 0xEFEF EFEF
R2 = 0x0000 2079
R3 = 0x0100 0000
堆栈指针指向的位置为: 0x2000 02A4
本文详细解析了ARMCortex-M0处理器中堆栈的使用方式,包括满-自减堆栈的工作原理,以及PUSH和POP指令如何进行寄存器内容的保存与读取。通过具体实例展示了堆栈指针的变化过程,帮助读者深入理解ARM架构的堆栈机制。
1万+

被折叠的 条评论
为什么被折叠?



