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

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 06:47:47
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得内容互换
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得内容互换
你可以把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内容交换.