堆栈是计算机中广泛应用的技术,基于堆栈具有的数据进出lifo特性,常应用于保存中断断点、保存子程序调用返回点、保存cpu现场数据等,也用于程序间传递参数。
堆栈是一种具有“后进先出”(lifo---last in first out)特殊访问属性的存储结构。堆栈一般使用ram 物理资源作为存储体,再加上lifo 访问接口实现。
堆栈的实现方法:
在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 sp---stack pointer)实现做一次调整,sp 总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,sp 即向相反方向做一次调整,如此就实现了后进先出的原则。
堆栈是计算机中广泛应用的技术,基于堆栈具有的数据进出lifo特性,常应用于保存中断断点、保存子程序调用返回点、保存cpu现场数据等,也用于程序间传递参数。
arm处理器中通常将寄存器r13作为堆栈指针(sp)。arm处理器针对不同的模式,共有 6 个堆栈指针(sp),其中用户模式和系统模式共用一个sp,每种异常模式都有各自专用的r13寄存器(sp)。它们通常指向各模式所对应的专用堆栈,也就是arm处理器允许用户程序有六个不同的堆栈空间。
堆栈指针寄存器在堆栈操作中使用,push和pop指令是从sp寄存器得到现行堆栈段的段内偏移量,所以称sp寄存器为堆栈指针,sp始终指向栈顶。
为了更准确地描述堆栈,根据压栈操作时堆栈指针的增减方向,将堆栈区分为'递增堆栈'(sp 向大数值方向变化)和'递减堆栈'(sp 向小数值方向变化);又根据sp 指针指向的存储单元是否含有堆栈数据,又将堆栈区分为'满堆栈'(sp 指向单元含有堆栈有效数据)和'空堆栈'(sp 指向单元不含有堆栈有效数据)。
这样两两组合共有四种堆栈方式--满递增、空递增、满递减和空递减。
arm处理器的堆栈操作具有非常大的灵活性,对这四种类型的堆栈都支持。
arm处理器中的r13被用作sp。当不使用堆栈时,r13 也可以用做通用数据寄存器。
汇编语言中sp是堆栈寄存器。堆栈——是一段按照后进先出(lifo)原则组织起来的连续存储区域。用于程序保存或恢复数据,或用于子程序调用及中断响应时保护与恢复现场。sp是堆栈指针寄存器,存放着当前堆栈栈顶地址。
一般情况下,对sp有影响的指令,对sp的操作都是隐式的,就是说sp并不出现在指令操作数当中。
例如:
push ax;累加器ax的内容压栈保存,(sp)=(sp)-2
pop bx;堆栈内保存的累加器ax的内容弹出到bx寄存器中,(sp)=(sp)+2
使用push、pop指令使用堆栈,要注意进出栈的匹配,否则将引起不可预期的后果。
.sp就是流处理器的意思,是dx10显卡的重要指标 。sp:堆栈寄存器sp(stack pointer)存放栈的偏移地址;
