微机原理与接口技术|浅谈栈的相关概念及应用
1.堆栈的基本注意要点
堆栈这个地方呀很神奇,主要用于暂存数据,8086/8088中专门有一个堆栈段寄存器SS放首地址。
1.1堆栈的操作原则
但是操作还是要一下四个原则
- 堆栈存取单位必须为一个字(16位),只能是存储器操作数或者寄存器,不可为
立即数 - 图为上低下高
- POP对SP是 +2 ;PUSH对SP是 -2。
- LIFO原则,后进先出。
1.2堆栈的操作指令
1.PUSH和POP:
PUSH AX
PUSH WORD PTR[DATA+SI]
POP DS
POP WORD PTR[BX]
- CS是非法的。
- 两个存储单元(两个字节)
2.POPF
如图
八位正好一个字节,但是因为要16位,所以实际情况为重复压栈,表示为0202H
1.3执行过程
(图片转载自https://blog.justlovesmile.top/,感谢这位博主给我的很多启发hhhh)
2.堆栈的应用
2.1保护现场
2.1.1 过程(子程序)(CALL)调用执行过程:
- ① 保护断点:将调用指令的下一条指令的地址 (断点)压入堆栈
- ② 获取子过程的入口地址赋给 IP(或CS和IP):子过程第1条指令的偏移地址
- ③ 执行子过程:功能实现,参数的保存及恢复
- ④ 恢复断点,返回原程序:将断点偏移地址由 堆栈弹出
2.1.2 中断调用:(INT为例类比段间间接调用
- ① 将FLAGS内容保存
- ② 影响IF,TF标志,CALL不影响
- ③终端服务程序入口地址在内存固定位置,可通过INT中断向量码找到
- ④ CALL可任意指定子程序入口地址的存放位置
2.2参数传递
- 在子程序调用中,有部分的操作需要传递参数,执行子程序前先将参数的值push进去,结束后要注意倒过来pop。
3.堆栈的小小感悟
3.1数据结构和微机原理的堆栈
- 数据结构里面的堆栈主要是利用后进先出的原理,进行数据的逆向输出,例如 数制转换、符号匹配等应用。
- 而微机中的堆栈主要是进行数据的一个暂存,比起利用数据的顺序不同是要注意利用数据的顺序达到保护现场呀~还有参数传递吖等作用
3.2 能量柱的累加
学堆栈的时候我总想到那个能量柱的增加,一层一层向叠罗汉一样。堆这个词很生动hhh,啥都不管就往上面放,一个出口的设置很轻松把控删减的操作,虽然受限制了一些,但是保留了必须的功能。这是我目前的感受hhhh。
(个人学习仅供参考,欢迎指正)