单片机堆栈指针的理解
堆栈指针sp在片内RAM128B中开辟栈区,并随时跟踪栈顶地址。
它是按先进后出的原则存取数据。
开机复位后,单片机栈底地址为07H。
主要用来保存临时数据,局部变量和中断/自程序的返回地址。
堆栈指针总是指向栈顶元素。
所以数据入栈的时候,堆栈指针先加1,再压栈。
向上增长方式。
和计算机的方式一样。
出栈的时候先弹出数据,堆栈指针再减1。
如果堆栈的实现是往上长的(就是说往顶的方向长,其实质是你的栈底是定死的不能动,入栈的东西只能不断往上叠,这就像你在书桌上放书一样,桌底是定死的,所以你的书只能一本一本地往上堆,往上长),计算机内部的堆栈的实现采取的就是这种模式,所以就得像你说的那样,先修改指针,然后插入数据,出栈时刚好相反,因为你堆栈指针指向的总是栈顶元素,栈底不能动,所以数据入栈前要先修改指针使它指向新的空余空间然后再把数据存进去,出栈的时候自然相反。
然而,如果堆栈的实现是往下长的(就是说你每压一个元素入栈,栈底就自动下移一个元素的位置,其实质就是这种堆栈模型是一个无底洞型),这个时候,你的栈顶就变成了定死的,你就可以先压入元素,然后再修改指针。
因为你的栈底是无限的,你压入一个元素,新的元素就取代先前的栈顶元素占。