十二、栈及栈操作的实现
十二、栈及栈操作的实现
栈结构
![](/2020/10/13/%E6%A0%88%E5%8F%8A%E6%A0%88%E6%93%8D%E4%BD%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/2020-10-13-10-25-16.png)
演示
![](/2020/10/13/%E6%A0%88%E5%8F%8A%E6%A0%88%E6%93%8D%E4%BD%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/2020-10-13-10-28-04.png)
问题:
1、CPU 如何知道一段内存空间被当作栈使用?
2、执行 push 和 pop 的时候,如何知道哪个单元是栈顶单元?
回答:
8086CPU 中,有两个与栈相关的寄存器:
栈段寄存器 SS | 存放栈顶的段地址 |
栈顶指针寄存器 SP | 存放栈顶的偏移地址 |
栈操作
![](/2020/10/13/%E6%A0%88%E5%8F%8A%E6%A0%88%E6%93%8D%E4%BD%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/2020-10-13-10-48-40.png)
预设代码:
![](/2020/10/13/%E6%A0%88%E5%8F%8A%E6%A0%88%E6%93%8D%E4%BD%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/2020-10-13-11-12-18.png)
单步跟踪:
T 命令作用:执行汇编程序,单步跟踪。
T 命令的使用方式是 T [=地址] [指令数]。如果忽略“地址”的话,T 命令从 CS:IP 处开始运行。“指令数”是要单步执行的指令的数量。
![](/2020/10/13/%E6%A0%88%E5%8F%8A%E6%A0%88%E6%93%8D%E4%BD%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/2020-10-14-14-08-09.png)
![](/2020/10/13/%E6%A0%88%E5%8F%8A%E6%A0%88%E6%93%8D%E4%BD%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/2020-10-14-14-10-22.png)
![](/2020/10/13/%E6%A0%88%E5%8F%8A%E6%A0%88%E6%93%8D%E4%BD%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/2020-10-14-14-11-44.png)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!