文章目录
- 栈结构
- 栈操作
- 栈的小结
栈结构
- 栈是一种只能在一端插入或删除的数据结构;
- 栈有两个基本的操作:入栈和出栈;
- 入栈:将一个新的元素放到栈顶;
- 出栈:从栈顶取出一个元素;
- 栈的操作规则:FILO(先进后出)
- CPU提供的栈机制:
- 8086 CPU提供相关的指令,支持用栈的方式访问内存空间;
- 基于8086 CPU的编程,可以将一段内存当作栈来使用;
- push入栈与pop出栈指令
- push ax: 将ax中的数据送入栈中;
- pop ax: 从栈顶取出数据送入ax
- 以字为单位对栈进行操作
问题:
1、CPU是如何知道一段内存空间被当作栈使用?
2、执行push与pop的时候,如何知道哪个单元是栈顶单元?
回答:
8086CPU中,有两个与栈相关的寄存器:
栈段寄存器SS: 存放栈顶的段地址
栈顶指针寄存器SP:存放栈顶的偏移地址
任何时刻,SS:SP 都指向栈顶元素。
栈操作
mov ax, 1000H ;栈顶的段地址存放至一般寄存器ax中
mov ss, ax ;将栈段地址传给ss寄存器
mov sp, 0010H ;将栈顶偏移地址存放至SP寄存器
mov ax, 001AH ;一般寄存器ax存放一个字 001AH
mov bx, 001BH ;一般寄存器bx存放一个字 001BH
push ax ;将寄存器ax的值压入栈,
push bx; 将寄存器bx的值压入栈
; 出栈操作
pop ax
pop bx
栈的小结
1、push、pop 实质上是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的;
2、执行push和pop指令时,SP中的内容自动改变;
3、8086提供的CPU栈操作机制:
- SS中存放栈顶段地址,SP存放栈顶偏移地址,入栈和出栈指令根据SS:SP指示的地址,按照栈的方式访问内存单元;
- push指令的执行步骤:
- 1、SP = SP - 2;
- 2、 向SS:SP 指向的字单元中送入数据;
- pop 指令的执行步骤:
- 从SS:SP 指向的字单元中读取数据;
- SP = SP + 2;