-2
我不知道爲什麼,當我編譯這個大會POPF和RCL/RCR指令
mov ax , 0x00FF
push ax
popf
rcr ax , 1
我得到807F
作爲答案。我知道popf
將堆棧的頂部移動到標誌寄存器中,但它是如何影響CF
的?它只插入第一個或最後一個被移動的單詞?
我不知道爲什麼,當我編譯這個大會POPF和RCL/RCR指令
mov ax , 0x00FF
push ax
popf
rcr ax , 1
我得到807F
作爲答案。我知道popf
將堆棧的頂部移動到標誌寄存器中,但它是如何影響CF
的?它只插入第一個或最後一個被移動的單詞?
在使用popf
之前,您已經推送了一個設置了8位的值。這些設置位中僅有5個將有效地改變一些處理器標誌。
後直接popf
的EFLAGS的最低字寄存器這個樣子的:
-- NT IO/PL OF DF IF TF SF ZF -- AF -- PF -- CF
0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1
^ ^ ^
These bits you are not allowed to change
從圖中得出,進位標誌設置完畢。由於rcr ax, 1
指令將CF移入仍保持0000000011111111(00FFh)的AX
寄存器的第15位,結果變爲1000000001111111(807Fh)。 CF仍然/再次設置,因爲AX
寄存器中的舊位0被放在那裏。
你爲什麼不諮詢指令集的參考? EFLAGS的最低位是'CF',所以是從那裏開始設置的。取決於你如何看待它,它是第一個或最後一個位:) – Jester
它完全用您從AX推送的內容覆蓋標誌。 –
使用調試器。它會顯示寄存器的值以及* real *中的每個標誌的值。爲獲得最佳效果,請結合指令集文檔(Google爲指令名稱+ x86)。 –