存储器堆栈

3.存储器堆栈

堆栈是以“后进先出”方式工作的一个存储区。888的堆栈操作是在存储器中实现的。8088中的堆栈段寄存器SS存放段地址,堆栈指针寄存器SP存放当前的栈顶。在系统中可以有若干个堆栈,每一个堆栈的最大空间可以是64KB,刚好是一个逻辑段的空间。不管系统有多少个堆栈,当前只能有一个是正在使用的,称为现行堆栈。每一个堆栈占用一个逻辑段,系统将段地址存放在SS中,当前位置存放在SP中,因而可以换算出当前单元的物理地址。实际上堆栈就是在操作对应的物理单元。堆栈的栈底是在逻辑段的最高位置处(假设堆栈空间是64KB)。当堆栈空的时候,SP指向栈底,即逻辑段的最大偏移地址处。特别要指出的是SS存放的不是栈底,而是段地址(段基址),如图4.18()所示。SS中存放的是段地址,SP中存放的是最大偏移地址。

8088的堆栈为16位宽,堆栈操作时是以字为单位进行的。

压栈的工作过程是:先将SP的内容减2,然后将16位信息的高8位存入新栈顶的高地址,低8位压入低地址,假设(AX)=1234H,(BX)=5678H,则将AX压栈,再将BX压栈,情况如图4.18(b)所示。

出栈的工作过程是:先将现在栈顶的16位信息复制到POP指令指定的目的寄存器中(如AX、BX等),然后将SP的内容加2,使SP指向新的栈顶。如图4.18(b)所示栈顶地址弹出后,变为图4.18(c)的情况。从图4.18(c)可以看出,5678H还存在存储器中,并没有受到破坏。

从图4.18所示中还可以看出栈底的那个字节是不使用的。

豫ICP备19006514号 网站地图 免责声明:如果侵犯了你的权益,请发邮件至:419017772@qq.com,我们会及时删除侵权内容,谢谢合作!
error: Content is protected !!