汇编语言检测点11.4
建议先自己思考问题的答案,不懂则返回看书
下面的程序执行后:(ax)= ?
析: pushf 和 popf 是对标志寄存器的操作指令,本质上还是对数据的操作,标志寄存器是16位,与通用寄存器(ax,bx……)不一样的是它是按“位”起作用的,即每一“位”都有它自己的含义,而通用寄存器整体表示一个含义。
具体分析:
mov ax,0
push ax
popf ;弹出的即push进的AX的值,即将AX的值给了标志寄存器,此时标志寄存器的16位都是零
mov ax,0fff0h
add ax,0010h ;add完后结果是10000H,显然无符号数计算有进位,所以CF=1,无符号数对OF不起作用,所以OF=0,
;值未变,SF=0,PF=1,ZF=1,DF=0,
;所以该指令执行完毕后,标志寄存器为:0000 0000 0100 0101
pushf ;将标志寄存器的值压栈
pop ax ;即将压入栈中的标志寄存器的值弹出给ax,此时AX=0000 0000 0100 0101
and al,11000101b ;执行完毕后,al=0100 0101 = 45H
and ah,00001000b ;执行完毕后,ah=0000 0000 = 00H
;所以AX=0045H