PUSH AX PUSH BX PUSH CX POP CX POP AX POP BX 为什么结果是AX和BX得内容互

问题描述:

PUSH AX PUSH BX PUSH CX POP CX POP AX POP BX 为什么结果是AX和BX得内容互换
1个回答 分类:综合 2014-12-15

问题解答:

我来补答
你可以把push指令看作一个源操作数,把pop看作目的操作数.
栈空间是由高地址到低地址生长的,push AX,push BX,push CX这连续的三个指令使得AX、BX、CX的值(注意是值,不是寄存器本身)在栈中由高地址向低地址依次排列.
pop的操作数为目的操作数,当pop CX,pop AX,pop BX时,依次将栈顶数据弹出到CX、AX、BX寄存器(注意这里是寄存器).
连续的三个push使得栈顶存放的数据为原CX的值,故弹出到CX寄存器,值不变;
弹出原CX的值以后,栈顶变为原BX的值,此时弹出到AX寄存器,AX的内容变为原BX的值;
弹出两组数据后,栈顶只剩下原AX的值,此时弹出到BX寄存器,BX的内容变为原AX的值.
故CX不变,仅完成了AX和BX内容交换.
 
 
展开全文阅读
剩余:2000