一. 栈的执行过程下图:
该图注意如下:
1. 任意时刻, SS:SP指向栈顶元素
SS:存放栈的段地址;
SP:存放栈的偏移地址;
2. 栈底的地址大.
3. 栈是空的是什么意思?
例如: 将10000H----1000FH这段空间当作栈, 初始状态栈是空的, 此时, SS=1000H, 那么SP= ?
a. 栈底地址大.
b. 任意时刻, SS:SP指向栈顶元素
所以, 栈底地址就是SS:SP=1000FH 也就是SS=1000H, SP=0FH
栈底就是栈的第一个元素, 那空栈就是SS=1000H, SP=10H.
二. PUSH的执行过程
请记住:
1. SP先减2, SS:SP指向新的栈顶(SP是向小的方向走的)
2. 把数据送入新的栈顶.
三. POP的操作过程
POP的过程就是与PUSH相反了
1. 把栈顶数据(SS:SP指向的数据)送入寄存器
2.SP增加2.
四. 栈的越界问题需要我们自己小心注意, CPU并没有机制来通知或者避免栈的越界.
五. PUSH与POP
PUSH和POP指令可以在寄存器和内存之间传送数据, 格式如下
PUSH 寄存器
POP 寄存器
PUSH 内存单元
POP 内存单元
PUSH和POP指令实质是一种内存传送指令, 可以灵活运用.
摘自 王爽老师 <<汇编语言>>