文章目录
3.6 栈
栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。
栈有两个基本的操作:入栈和出栈。
- 入栈:将一个新的元素放到栈顶
- 出栈:从栈顶取出一个元素
栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。即LIFO(Last In First Out)
3.7 CPU提供的栈机制
- CPU中都有栈的设计
- 8086CPU提供相关的指令来以栈的方式访问内存空间
- 这意味着,我们在基于8086CPU编程的时候,可以将一段内存当作栈来使用
- 8086CPU提供入栈和出栈的指令:PUSH(入栈)、POP(出栈)
push ax
:将寄存器ax中的数据送入栈顶pop ax
:从栈顶取出数据送入ax- 8086CPU的出入栈操作都是以字为单位进行的。
疑问1:CPU如何知道当前要执行的指令所在的位置?
CS、IP中存放着当前指令的段地址和偏移地址
疑问2:CPU如何知道哪个单元是栈顶单元?
段寄存器SS 存放栈顶的段地址
寄存器SP 存放栈顶的偏移地址
任何时刻,SS:SP指向栈顶元素
push指令的执行过程
push ax
(1)SP=SP-2;
(2)将ax的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶