80X86微处理器堆栈指令

压栈/弹栈指令
压栈:PUSH OP1;
出栈:POP OP1
OP1可以是16位或32位的寄存器或存储器

压栈/弹栈数据存储过程
如SP=1000H,BP=0FFFFH,执行下列指令后,DX=?,SP=?
①STC //Set CF=1;
②PUSH BP
③ADC BP,0
④PUSH BP
⑤POP DX
80X86微处理器堆栈指令
指令执行过程:一开始,SP指向1000H,BP=0FFFFH,执行②后,BP的内容被复制到SP指向的下一个字单元中,即0FFFFH单元存放FFH,0FFFE单元存放FFH,(SP指向0FFFEH),执行④后如图;执行⑤时,POP将SP当前指向单元的数据弹出,所以弹出0FFFCH、0FFFDH两个单元的数据到DX。
所以DX=0;SP=0FFFEH;

注意两点①堆栈指令是数据传送指令,压栈后,将OP1的数据复制到堆栈所指存储单元,OP1还拥有原来的数据(不是我给你了我就没了);②压栈时是从SP所指下一个存储单元开始存放数据,出栈时是从SP当前所指存储单元弹出数据。(重点是②)