组成原理(五):指令系统之 堆栈操作
堆栈是一种按特定该顺序进行存取的存储区,特定顺序归结为"后进先出(LIFO)"或"先进后出(FILO)".
在计算中,堆栈主要用来暂存中断断点、子程序调用时的返回地址、状态标志及现场信息等。
1、堆栈结构
1.1、寄存器堆栈
计算机中用一组专门的寄存器构成寄存器堆栈,又称为硬堆栈。寄存器堆栈结构如下:
栈顶是固定的,寄存器组中各寄存器相互连接,它们之间具有对应位自动推移的功能,可将一个寄存器的内容推移到相邻的另一个寄存器中。
1.2、存储器堆栈
主存中划出的区域作为堆栈,这种堆栈被称为软堆栈,堆栈的大小可变,栈底固定,栈顶浮动,需要一个专门的硬件寄存器作为堆栈栈顶指针,简称栈指针(SP).
栈指针所指定的存储单元就是堆栈的栈顶。存储器堆栈可分两种:自底向上生成堆栈和自顶向下生成堆栈。
1.2.1、自底向上生成堆栈(向低地址方向生成)
堆栈的栈底地址大于栈顶地址,进栈时,堆栈指针SP的内容需要先自动减1,然后再将数据压入堆栈;出栈时,需要先将堆栈中的数据弹出,然后SP的内容再自动加1.
进、出栈过程如下:
A为寄存器或主存单元地址;(SP)表示堆栈指针的内容,即栈顶单元地址;((SP))表示栈顶单元的内容。
1.2.2、自顶向下生成堆栈(向高地址方向生成)
栈底地址小于栈顶地址,进栈时,先令(SP) + 1 → SP,然后再压入数据;出栈时,先将数据弹出,然后 (SP) - 1 → SP。
2、堆栈操作
堆栈操作,通过调整堆栈指针而给出新的栈顶位置,以便对位于栈顶位置的数据进行操作。
访问堆栈的指令只有 进栈(压入) 和 出栈(弹出 )两种。