什么是堆栈组织结构?


堆栈 也被称为后进先出 (LIFO) 列表。它是CPU 中最重要的特性之一。它保存数据,以便最后存储的元素首先被检索。堆栈是一个带有地址寄存器的内存单元。该寄存器影响堆栈的地址,称为堆栈指针 (SP)。堆栈指针持续地影响位于堆栈顶部的元素的地址。

它可以将元素插入堆栈或从堆栈中删除元素。插入操作称为 push 操作,删除操作称为 pop 操作。在计算机堆栈中,这些操作通过增加或减少 SP 寄存器来模拟。

寄存器堆栈

堆栈可以排列为一组内存字或寄存器。考虑一个如图所示排列的 64 字寄存器堆栈。堆栈指针寄存器包含一个二进制数,它是堆栈顶部元素的地址。三个元素 A、B 和 C 位于堆栈中。

元素 C 位于堆栈顶部,堆栈指针持有 C 的地址,即 3。顶部元素通过读取地址 3 处的内存字并将堆栈指针递减 1 来从堆栈中弹出。然后,B 位于堆栈顶部,SP 持有 B 的地址,即 2。可以插入一个新字,通过将堆栈指针递增 1 并将字插入到递增的位置来压入堆栈。

堆栈指针包含 6 位,因为 26 = 64,并且 SP 不能超过 63(二进制中的 111111)。毕竟,如果将 63 递增 1,则结果为 0(111111 + 1 = 1000000)。SP 只保存六个最低有效位。如果将 000000 递减 1,则结果为 111111。

因此,当堆栈已满时,一位寄存器“FULL”被设置为 1。如果堆栈为空,则一位寄存器“EMTY”被设置为 1。数据寄存器 DR 保存构成或读出的二进制信息堆栈。

首先,将 SP 设置为 0,EMTY 设置为 1,FULL 设置为 0。现在,由于堆栈未满 (FULL = 0),因此使用 push 操作插入新元素。

push 操作按如下方式执行:

SP←SP + 1它可以递增堆栈指针
K[SP] ← DR它可以将元素写入堆栈顶部
如果 (SP = 0) 则 (FULL ← 1)检查堆栈是否已满
EMTY ← 0标记堆栈非空

堆栈指针递增 1,并将下一个较高字的地址保存在 SP 中。来自 DR 的字使用内存写入操作插入到堆栈中。第一个元素保存在地址 1 处,最后一个元素保存在地址 0 处。如果堆栈指针位于 0,则堆栈已满,并且“FULL”设置为 1。这是 SP 位于 63 位置并且在递增 SP 后,最后一个元素保存在地址 0 处的条件。当元素保存在地址 0 处时,堆栈中没有更多空寄存器。堆栈已满,“EMTY”设置为 0。

如果堆栈非空(如果 EMTY = 0),则从堆栈中删除新元素。pop 操作包括以下微操作序列:

DR←K[SP]它可以从堆栈顶部读取元素
SP ← SP – 1它可以递减堆栈指针
如果 (SP = 0) 则 (EMTY ← 1)检查堆栈是否为空
FULL ← 0标记堆栈未满

从堆栈中读取顶部元素并传输到 DR,从而递减堆栈指针。如果堆栈指针达到 0,则堆栈为空,并且“EMTY”设置为 1。这是从位置 1 读取元素并将 SP 递减 1 的情况。

更新于:2023年10月31日

58K+ 浏览量

开启您的职业生涯

完成课程后获得认证

开始学习
广告
© . All rights reserved.