芯源半导体CW32
直播中

刘英

8年用户 1180经验值
私信 关注
[经验]

堆栈指针SP介绍

SP 堆栈指针:8位寄存器,用来指示堆栈的位置,可由软件修改。

堆栈的介绍
堆栈是一种按“先进后出”规律操作的存储结构。不同类型的处理器其堆栈的设计各不相同:

SP寄存器作为堆栈指针。这种结构的特点是充分的利用RAM的空间,使堆栈的空间得以扩大。但它也有一种“致命”的弱点:数据很容易与堆栈发生冲突,特别是初学编程者。
为了避免上述问题的出现,编程者往往在程序的开始加上一条指令: MOV SP,60H 试分析为什么?

百度解释:
单片机复位后SP的值一般要用一条指令赋值为60H,这只是个别人写程序的爱好与习惯罢了,没有任何规定必须是赋值60H,更没有任何原因必须选60H。
就单片机复位后,SP=07H,不用重新赋值也是可以的,否则,为什么当初设计者会这么设计呢。由于51单片机的堆栈是向上增长的,所以,为了避免堆栈区与用户数据区互相影响,才将SP设置在60H以后,比较合理的是赋值为6FH,这样堆栈区可用70H~7FH,预留有16个单元足够,也不浪费。

堆栈的作用
①保护程序的断点地址(既返回地址);
②保护数据(也称保护现场)。

堆栈操作的两种方式
①断点地址的保护是靠执行子程序调用指令或发生中断调用时,由硬件自动实现断点地址的进栈保护;在子程序或中断服务程序返回时有RET或REti指令实现恢复断点;
②而对于其它需要保护的数据都要由专用的指令PUSH或POP来实现进栈保护或恢复

更多回帖

发帖
×
20
完善资料,
赚取积分