微机原理:8086/8088堆栈操作

目录

一、什么是堆栈

二、8086/8088堆栈基础知识

三、堆栈操作指令

3.1 PUSH AX的执行过程

3.2 POP BX的执行过程

3.3 堆栈指令操作说明

四、例题小练习


一、什么是堆栈

  1. 内存中一个特殊区域,用于存放暂时不用或需要保护的数据,常用于响应中断或子程序调用。

二、8086/8088堆栈基础知识

8086/8088规定堆栈的区域在堆栈段内,用SS(堆栈段寄存器)记录其段地址,用SP(堆栈指针寄存器)记录栈顶在栈内的偏移地址,即SP始终指向栈顶

例:

        已知SS=1000H,  SP=0100H 则: 堆栈段的段首地址=10000H栈顶(偏移)地址=0100H 若该段最后一个单元地址为10200H,则:栈顶偏移地址=0200H

        栈顶:堆栈的顶部。即最后推入堆栈的信息所在的单元。

        栈顶随着栈顶随着数据出栈、入栈而变化。

        8086/8088的生长方向为向下生长,即栈顶向低地址生长,所以他的栈顶在下方。

空栈:在进行堆栈操作前,为空栈。此时SP应预置一个初值。该值为堆栈空间的大小。

SP初值=堆栈空间的最大容量

例:SP=0008H。则最大容量为8个字节。

SP指向当前的栈顶。

三、堆栈操作指令

堆栈指令PUSH和POP对应着入栈和出栈

PUSH是将寄存器、段寄存器的数据入栈或者将内存单元处的字入栈

POP是将栈顶的数据送入寄存器、段寄存器(除了CS)、内存单元中

这两个操作数都是以为单位进行的

3.1 PUSH AX的执行过程

(1)入栈SP先减2,先指向新的栈顶

为什么是减2呢?

答:因为在8086/8088中PUSH和POP指令都是对16位寄存器或存储器两单元的操作数来操作的,但是内存空间(包括栈空间)是以字节(8位)为单位进行存储的,所以无论进栈或出栈,都要使用栈空间的两个字节。即在做进栈时,其栈指针(SP)要SP-2,出栈时,SP要SP+2。

(2)将AX中的内容送入指向的内存单元处

注意:数据存入遵循“高地址存数据高位,低地址存数据低位

3.2 POP BX的执行过程

(1)出栈数据先弹出,将SS:SP指向的内存单元一个字的数据弹出到BX寄存器中

(2)SP=SP+2,SS:SP指向新的栈顶,SP随着出栈入栈操作一直在变动

3.3 堆栈指令操作说明

四、例题小练习

设堆栈指针SP的初值为1000H,AX=2000H,BX=3000H,试问:

(1)执行指令PUSH AX后,SP的值是多少?

(2)再执行PUSH BX 及POP AX后,SP、AX、和BX的值是多少?

答:(1)执行PUSH后先SP-2,所以SP=1000H-2H=0FFEH;

(2)再执行PUSH SP-2,后POP,SP+2所以SP的值不变还是0FFEH;堆栈遵循“先入后出”的原则所以将堆栈上方的3000H弹出给了AX,所以AX的值为3000H,而BX的值不变为3000H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值