组成原理(五):指令系统之 堆栈操作
堆栈是一种按特定该顺序进行存取的存储区,特定顺序归结为"后进先出(LIFO)"或"先进后出(FILO)".
在计算中,堆栈主要用来暂存中断断点、子程序调用时的返回地址、状态标志及现场信息等。
1、堆栈结构
1.1、寄存器堆栈
计算机中用一组专门的寄存器构成寄存器堆栈,又称为硬堆栈。寄存器堆栈结构如下:
栈顶是固定的,寄存器组中各寄存器相互连接,它们之间具有对应位自动推移的功能,可将一个寄存器的内容推移到相邻的另一个寄存器中。
1.2、存储器堆栈
主存中划出的区域作为堆栈,这种堆栈被称为软堆栈,堆栈的大小可变,栈底固定,栈顶浮动,需要一个专门的硬件寄存器作为堆栈栈顶指针,简称栈指针(SP).
栈指针所指定的存储单元就是堆栈的栈顶。存储器堆栈可分两种:自底向上生成堆栈和自顶向下生成堆栈。
1.2.1、自底向上生成堆栈(向低地址方向生成)
堆栈的栈底地址大于栈顶地址,进栈时,堆栈指针SP的内容需要先自动减1,然后再将数据压入堆栈;出栈时,需要先将堆栈中的数据弹出,然后SP的内容再自动加1.
进、出栈过程如下:
A为寄存器或主存单元地址;(SP)表示堆栈指针的内容,即栈顶单元地址;((SP))表示栈顶单元的内容。
1.2.2、自顶向下生成堆栈(向高地址方向生成)
栈底地址小于栈顶地址,进栈时,先令(SP) + 1 → SP,然后再压入数据;出栈时,先将数据弹出,然后 (SP) - 1 → SP。
2、堆栈操作
堆栈操作,通过调整堆栈指针而给出新的栈顶位置,以便对位于栈顶位置的数据进行操作。
访问堆栈的指令只有 进栈(压入) 和 出栈(弹出 )两种。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)