80X86汇编 pushf 和 popf 指令

pushf 的功能是将标志寄存器的值压栈,而 popf 是从栈中弹出数据,送入标志寄存器中。

pushfpopf 为直接访问标志寄存器提供了一种方法。

8086CPU 的 flag 寄存器(即标志寄存器) 的结构如下:

20201113213430

王爽汇编语言 检测点 11.4 帮助理解

题目:下面的程序执行后:(ax) = ?

mov ax,0 ; (ax) = 0
push ax ; 将 (ax) 入栈
popf ; 将 flag 寄存器的所有位都初始化为 0. 因为它们使用的是同一个栈结构.
mov ax,0ff0h ; (ax) = 0ff0h
add ax,0010h ; 执行 add 后, 结果是: (ax) = 0000h(作为无符号数, 产生进位 CF = 1)
             ; 而作为有符号数没有溢出, OF = 0, 其它 ZF = 1, SF = 0, PF = 1. 我们把这些
             ; 标志位按照顺序组合起来(不能确定的用 x 表示, 没有使用的用 0 表示) --> 00000xxx010x0101
pushf ; 将 flag 的值入栈
pop ax ; 弹栈, (ax) = 00000xxx010x0101
and al,11000101B ; ax 低八位按位与, 010x0101 and 11000101 = 01000101B = 45H
and ah,00001000B ; ax 高八位按位与, 00000xxx and 00001000 = 00000000B = 00H

答案是 (ax) = 0045h

原文地址:https://www.cnblogs.com/fanlumaster/p/13971856.html