栈
-
栈:是一种具有特殊的访问方式的存储空间(后进先出, Last In Out Firt,LIFO)
- 8086会将CS作为代码段的段地址,将CS:IP指向的指令作为下一条需要取出执行的指令
- 8086会将DS作为数据段的段地址,mov ax,[address]就是取出DS:address的内存数据放到ax寄存器中
- 8086会将SS作为栈段的段地址,任意时刻,SS:SP指向栈顶元素
- 8086提供了PUSH(入栈)和POP (出栈)指令来操作栈段的数据
比如push ax是将ax的数据入栈,pop ax是将栈顶的数据送入ax
push ax
![](https://img.haomeiwen.com/i6565380/2001fccb6a95c200.png)
![](https://img.haomeiwen.com/i6565380/2a8d19fe8ca6f2c8.png)
思考
![](https://img.haomeiwen.com/i6565380/330933e9944d5df0.png)
栈顶越界-push
![](https://img.haomeiwen.com/i6565380/25f2d6eb8f559ed9.png)
栈顶越界-pop
![](https://img.haomeiwen.com/i6565380/e898cad30d88e738.png)
栈顶越界
![](https://img.haomeiwen.com/i6565380/b0ae18de439c76e2.png)
![](https://img.haomeiwen.com/i6565380/ba406a29b1a2141b.png)
push - pop
![](https://img.haomeiwen.com/i6565380/e046667a2db1d312.png)
- 在8086中,push、pop操作的数据都是2个字节的
练习
![](https://img.haomeiwen.com/i6565380/3d5bf0cf31a99169.png)
栈段
-
对于8086来说,在编程时,可以根据需要,将一组内存单元定义为一个段
-
我们可以将一组长度为N(N<=64KB)、地址连续、起始地址为16倍数的内存单元,当做栈空间来使用,称为栈段。比如用10010H ~ 1001FH这段内存空间当做栈来使用,我们就可以认为10010H ~ 1001FH是一个栈段,它的段地址为1001H,长度为16字节
-
如何使用push、pop等栈操作指令访问我们定义的栈- 段?
用SS存放栈段的段地址,用SP存放栈顶的偏移地址
段的总结
![](https://img.haomeiwen.com/i6565380/5d0545d85448ea97.png)
练习
![](https://img.haomeiwen.com/i6565380/eccd9670aecace78.png)
![](https://img.haomeiwen.com/i6565380/6c345ca7c36a3181.png)
网友评论