堆栈指针在什么情况下需要更改,修改时需要考虑什么
8051单片机在复位后,堆栈的底部就在07H,压栈时,将向08H方向增长。
如果需要改变默认值,可以在初始化阶段使用如下指令:MOV SP, #6FH,即可将堆栈的底部设置在6FH。
堆栈指针的作用就是指向栈顶元素的,还可以对栈顶元素进行出栈操作。当堆栈中的元素进行出栈或入栈操作时,都会使栈顶元素发生变化,堆栈指针sp就需要重新赋值,让其指向新的栈顶元素。
扩展资料:
堆栈用于多种数值计算领域。表达式求值是编译程序中较为常见的操作,在算术表达式求值的过程中,需要使用堆栈来保存表达式的中间值和运算符;
堆栈使得表达式的中间运算过程的结果访问具有了一定的自动管理能力。大部分编译型程序设计语言具有程序递归特性,递归能够增强语言的表达能力和降低程序设计难度。
参考资料来源:百度百科-堆栈
数据入栈前要先修改堆栈指针,使它指向新的空余空间然后再把数据存进去,出栈的时候相反。一般堆栈的栈底不能动。
计算机中的堆栈主要用来保存临时数据,局部变量和中断/调用子程序程序的返回地址。
堆栈指针是在栈操作过程中,有一个专门的栈指针(习惯上称它为TOP),指出栈顶元素所在的位置。
堆栈指针总是指向栈顶元素。
堆栈可以使向下生长的(向低地址),也可以是向上生长的。
如果堆栈是向上生长的,数据入栈的时候,堆栈指针先加1,再压栈。出栈的时候先弹出数据,堆栈指针再减1。如果堆栈是向下生长的,数据入栈时指针将减1,数据出栈时指针将加1。
扩展资料
对比分析
堆栈是计算机科学领域重要的数据结构,它被用于多种数值计算领域。表达式求值是编译程序中较为常见的操作,在算术表达式求值的过程中,需要使用堆栈来保存表达式的中间值和运算符,堆栈使得表达式的中间运算过程的结果访问具有了一定的自动管理能力。
大部分编译型程序设计语言具有程序递归特性,递归能够增强语言的表达能力和降低程序设计难度。递归程序的递归深度通常是不确定的,需要将子程序执行的返回地址保存到堆栈这种先进后出式的结构中,以保证子程序的返回地址的正确使用顺序。
函数式程序设计语言中,不同子函数的参数的种类和个数是不相同的,编译器也是使用堆栈来存储子程序的参数。
1、堆栈空间分配
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS(操作系统)回收,分配方式倒是类似于链表。
2、堆栈缓存方式
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
3、堆栈数据结构区别
堆(数据结构):堆可以被看成是一棵树,如:堆排序。
栈(数据结构):一种先进后出的数据结构。
8051单片机在复位后,堆栈的底部就在07H,压栈时,将向08H方向增长。
如果需要改变默认值,可以在初始化阶段使用如下指令:
MOV SP, #6FH
即可将堆栈的底部设置在6FH。