8086CPU的栈操作和PUSH与POP

 一. 栈的执行过程下图:

8086CPU的栈操作和PUSH与POP_第1张图片

该图注意如下:

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的执行过程

8086CPU的栈操作和PUSH与POP_第2张图片

请记住:

1. SP先减2, SS:SP指向新的栈顶(SP是向小的方向走的)

2. 把数据送入新的栈顶.

 

三. POP的操作过程

8086CPU的栈操作和PUSH与POP_第3张图片

POP的过程就是与PUSH相反了

1. 把栈顶数据(SS:SP指向的数据)送入寄存器

2.SP增加2.

 

四. 栈的越界问题需要我们自己小心注意, CPU并没有机制来通知或者避免栈的越界.

五. PUSH与POP

PUSH和POP指令可以在寄存器和内存之间传送数据, 格式如下

PUSH 寄存器

POP 寄存器

PUSH 内存单元

POP 内存单元

PUSH和POP指令实质是一种内存传送指令, 可以灵活运用.

 

 

摘自 王爽老师 <<汇编语言>>

你可能感兴趣的:(8086CPU的栈操作和PUSH与POP)