栈
定义
栈是一种具有特殊的访问方式的存储空间。它的特殊性在于最后进入这个空间的数据,最先出去,遵循LIFO(后进先出)。
CPU提供的栈机制
CPU[1]提供相关的指令来以栈的方式访问内存空间,这就意味着在编程的时候,可以将一段内存当作栈来使用。
8086CPU提供入栈[2]和出栈[3]指令,最基本的就是PUSH(入栈)和POP(出栈)。8086CPU的入/出栈都是以字为单位进行的。这里举例说明
push ax : 表示将寄存器ax中的数据送入栈中
popax : 表示将栈顶的数据送入到寄存器ax中
那么,当执行push或pop的指令时,CPU是如何确定栈顶单元的呢?
其实是有相应的寄存器来存放栈顶的地址,在8086CPU中,利用段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。
任意时刻,SS:SP指向栈顶元素。
push和pop指令执行时,CPU从SS和SP中得到栈顶的地址。
栈顶超界问题
【栈】栈顶超界的情况:
1.栈满的时候,再使用push指令入栈。
2.栈空的时候,再使用pop指令出栈。
8086CPU不保证我们对栈的操作不会越界,8086CPU只知道栈顶在何处(由SS:SP指示),而不知道我们安排的栈空间有多大。
习题
1.如果将10000H~1000FH这段空间当作栈,初始状态栈是空的,此时,SS=1000H,SP=?
2.(1) 将10000H~1000FH这段空间当作栈,初始状态栈是空的;
(2) 将AX=001AH,BX=001BH;
(3) 将AX、BX中的数据入栈;
(4) 将AX、BX消零;
(5) 从栈中恢复AX、BX原来的内容。
- 这里的CPU指的是8086CPU ?
- 将一个新的元素放到栈顶 ?
- 从栈顶取出一个元素 ?
推荐阅读
- JS中的各种宽高度定义及其应用
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- 列出所有自定义的function和view
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 运营是什么()
- 程序员客栈TOP收入的萌系开发者心得|程序员客栈TOP收入的萌系开发者心得 - 雨晴
- 自定义MyAdapter
- Android自定义view实现圆环进度条效果
- C语言进阶栈帧示例详解教程