寄存器B中的内容被保存到堆栈指针指向的地址,即存储器地址7FFFh处。
堆栈指针减1,变为7FFEh。
寄存器C中的内容被保存到堆栈指针指向的地址,即存储器地址7FFEh处。
类似的,在堆栈指针仍为7FFEh的情况下,执行POP BC指令时会将上面的步骤反过来执行一遍:
堆栈指针指向的地址(7FFEh)的内容加载到累加器C。
堆栈指针加1,变为7FFFh。
堆栈指针指向的地址(7FFFh)的内容加载到累加器B。
堆栈指针加1,变为8000h。
每执行一条PUSH指令,堆栈都会增加两个字节,这可能会导致程序出现一些小错误一堆栈可能会不断增大,最终覆盖掉存储器中保存的程序所必需的代码或数据。这种错误被称作堆栈上溢(stack overflow)。类似的,如果在程序中过多地使用了POP指令,则会过早地取完堆栈中的数据从而导致类似的错误,这种情况称为堆栈下溢(stackunderflow)。
如果8080连接的是一个64KB的存储器,你可能会把堆栈指针初始化为0000h。当执行第一条 PUSH指令时,堆栈指针会减1变为 FFFFh,即存储器的最后一个的存储单元。这时,堆栈的初始位置将会是存储器的最高地址,因为程序的代码通常从0000h开始存放,因此两者将保持非常远的距离。
8080 使用LXI指令为堆栈寄存器赋值,LXI是Load Extended Immediate的缩写,即加载扩展的立即数。下面的这些指令将把操作码后的两个字节保存到16位寄存器对中。
指令:
LXI BC, 527Ah
编码隐匿在计算机软硬件背后的语言
294