堆栈在计算机中的应用,计算机中的堆栈

堆栈基本内容

1、堆栈的定义

• 堆栈是一个特定的存储区或寄存器,它的一端是固定的(栈底),另一端是浮动的(栈顶),主要用于函数调用、中断切换时保存和恢复现场数据及局部变量的临时保存。

• 所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”(FILO—First-In/Last-Out)的原则存取,位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出

• 在内存储器(随机存储器)中开辟一个区域作为堆栈,叫软件堆栈;用寄存器构成的堆栈,叫硬件堆栈。

• 单片机应用中,堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈堆栈中的物体具有一个特性:第一个放入堆栈中的物体总是被最后拿出来, 这个特性通常称为先进后出(FILO—First-In/Last-Out)。 堆栈中定义了一些操作, 两个最重要的是PUSH和POP。

2. 堆栈的操作

• PUSH(入栈)操作:将数据存放到堆栈中。堆栈指针(SP)加1,然后在堆栈的顶部加入一 个元素。

• POP(出栈)操作:从堆栈中弹出数据。先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中(目的位置),然后再将堆栈指针(SP)减1。这两种操作实现了数据项的插入和删除。

3、堆栈长度:栈空间的大小

4、栈底(Bottom):栈底指向的是堆栈段中地址最大的字单元。

5、栈顶(Top):栈顶是堆栈指针SP指向的位置。当前栈顶字单元的逻辑地址为 SS:SP(SS为堆栈段的段基址)

6、堆栈的生长方式

• 向上生长:当压入操作后,堆栈指示器SP向地址增大方向变化。

• 向下生长:当压入操作后,堆栈指示器SP向地址减小方向变化。

绝大多数计算机采用向下生长方式。

7、空栈:

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

SP初值=堆栈空间的最大容量例:SP=0008H。则最大容量为8个字节。SP指向当前的栈顶。

8086/8088中堆栈的设置

STACK1 SEGMENT PARA STACK

DB 40H DUP(0)

STACK1 ENDS

• 定义一个段,名称为stack1,

• para表明该段起始地址对齐到para。 1 para= 16 bytes。

• stack声明该段是堆栈段

• DB表示数据的类型是字节型,x dup (z) 表示将z这个变量复制X遍,即为

stack1段分配40H(64个)字节的空间,并赋初始值为0

• segment是段定义的伪指令。在汇编中有数据段,代码段,堆栈段和附加段

• [格式]

segment_name SEGMENT 【定位类型】 【组合类型】 【类别名】

···; //here is your codesegment

ends

• 【定位类型】指明段开始的边界,如para,它使段定位在小段的边界,段首地址正好能被16整除,定位类型未指定时默认为para

• 段的定位类型有4种,分别是:page(页起始),起始地址以00H结尾,能被256整除para (节起始),起始地址以0H结尾,能被16整除word(字起始),起始地址末位为0,是偶地址byte (字节起始),起始地址为任意边界

• 【组合类型】决定本段是否要和其他段组合在一起,组合类型有:stack,common,public

• 【类别名】连接时用于相关段组合在一起,如代码段’code’,数段’Data’,堆栈段’Stack’

• 例: stack segment para stack ‘stack’

• 解释: para表明该段起始地址对齐到para。 1 para= 16 bytes。stack声明该段是堆栈段,这样在最后的链接link时,会将该最终创建的exe文件头部的SS:SP域指向该段的末尾

• ‘stack’表明该段的组合名为’stack’。同一程序不同模块中,相同组合名的段会组合到一起。组合名也

决定了最后exe文件中各个段的排列顺序

来源:oschina

链接:https://my.oschina.net/u/4408223/blog/4320294

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值