最近由于抄作业被《组成原理》老师发现,作为惩罚,老师让我上课给大家分享一下关于堆栈寻址方式的相关知识,分享固然是很好的事,但是原因是由于抄作业,还是希望大家引以为戒,作业以后自己独立完成。
下面,进入正题:
关于堆栈结构,计算机中常用的有两种,一种是串联堆栈结构,另一种是存储器堆栈结构,下面详细介绍一下这两种堆栈结构。
串联堆栈结构
串联,字面意思来讲,就是将一系的东西连起来,形成一个串式结构,而在这里,指的就是将一系列的寄存器串联起来,模拟成为一个堆栈结构,用于临时保存某些数据。
下图演示进栈与出栈操作:
串联堆栈的缺点:
- 寄存器数目有限,当压入的数据多于寄存器数时,老的数据就会从栈低压出从而丢失。
- 数据的读出过程是破坏性的,当一个数据因需要读取而出栈后,其也就不再存在于堆栈中。
存储器堆栈结构
为了解决串联堆栈的缺点,于是引入了存储器堆栈,使用一部分主存来作为堆栈。
存储器堆栈的工作过程:
- 进栈操作:
(A)→Msp ,(SP)-1→SP
其中(A)表示通用寄存器A的内容,SP表示堆栈指示器,Msp 表示堆栈指示的存储器栈顶单元。 - 出栈操作:
(SP)+1→SP,(Msp)→A
总结为:进栈时先存入数据,后修改堆栈指示器;出栈时,先修改堆栈指示器,然后取出数据。
存储器堆栈的优点:
- 堆栈能够具有程序员要求的任意长度;
- 可按程序员要求,在主存中建立多个堆栈;
- 可用访存指令来对堆栈中的数据进行寻址操作。
串联堆栈和存储器堆栈区别
- 使用的存储元不同,串联堆栈使用的是寄存器,而存储器堆栈使用的是主存
- 所处位置不同,串联堆栈位于CPU内部,而存储器堆栈位于主存中
- 大小不同,串联堆栈一般存储空间比较小,且大小固定,而储存器堆栈存储空间较大,且空间可以根据需求变化。
- 栈的存储方式不同,串联堆栈的栈顶不变,栈底随栈中元素数量而变化,存储器堆栈栈底固定,栈顶根据栈中元素数量而变化。