奎克的藏经阁 · 原书印刷页

编码 隐匿在计算机软硬件背后的语言 · 第 293 页

PDF 物理页索引 309 · 编码隐匿在计算机软硬件背后的语言

书名
编码 隐匿在计算机软硬件背后的语言
作者
未记录
印刷页
293
PDF 物理页
309(从 0 开始)
章节
编码隐匿在计算机软硬件背后的语言
UUID
38270854-596f-4a26-8183-db8c968c6020
来源类型
original_book
页面 SHA-256
d92e69e4b2058e870b91daae7c11d6242c5b86211911d99b76668bbd6311beb8

显然,由于先进后出的原则,这些数据在先前存放的C、B、A中的数据之前弹出堆栈。

堆栈的功能是怎样实现的呢?首先,堆栈其实就是一段普通的RAM存储空间,只是这段空间相对独立不另作他用。8080微处理器设置了一个专门的16位寄存器对这段存储空间寻址,这个特殊的寄存器称为堆栈指针(SP,Stack Pointer)。

在我们所举的例子中,对于8080来说使用PUSH和POP对寄存器操作实际上是不准确的。在8080中,执行PUSH指令实际上是把16位的数据保存到堆栈,执行POP指令是把这些数据从堆栈中取回至寄存器。因此,对于上面的如PUSHC,POPC等指令,我们对其进行如下的修改。

PUSH BC 指令将寄存器 B 和 C 中的数据保存到堆栈,而 POP BC 则将这些数据从堆栈取回到寄存器B和C中,并且保持原来的顺序。最后一行指令中的PSW代表程序状态字,如前所述,这是一个8位的寄存器,用于保存标志位。最后一行的PUSH和POP指令的操作对象实际上是累加器和PSW,即压入和弹出堆栈的数据由累加器和PSW中的内容组成。如果你想把所有寄存器中的数据及全部标志位都保存到堆栈,可以使用下面的指令:

PUSH PSW

PUSH BC

PUSH DE

PUSH HL

堆栈是怎样工作的呢?我们假设堆栈指针是8000h,当执行PUSH BC指令时将会引发以下操作。

堆栈指针减1,变为7FFFh。

19 两种典型的微处理器

POP E POP D POP C

293