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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM