首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

x86 指令不影響標志位時,標志位保持原值不變

     編輯:程式設計綜合問答

結論

指令若不影響某標志位,該標志位保持執行前的值(0 仍 0,1 仍 1)。

以 MOV AL, 0 為例

  • MOV 不修改 CF、OF、SF、ZF、AF、PF 中的任何一位(Intel 手冊明確列出「Flags affected: None」)。
  • 執行前 CF=0, OF=0 → 執行後仍 CF=0, OF=0。
  • 唯一例外:MOV 到段寄存器/控制寄存器/調試寄存器可能觸發保護異常,但不改變算術標志位。

常見不影響標志位的指令

指令類別示例
數據傳送MOV, PUSH, POP, XCHG, LEA, LDS/LES/LFS/LGS/LSS
控制轉移JMP, CALL, RET, LOOP, Jcc (條件跳轉本身不改標志)
字符串MOVS, CMPS, SCAS, LODS, STOS (REP 前綴不影響)
I/OIN, OUT
系統HLT, NOP, WAIT, ENTER, LEAVE

對比:影響標志位的指令

ADD, SUB, INC, DEC, AND, OR, XOR, TEST, CMP, SHL/SHR, RCL/RCR/ROL/ROR 等算術/邏輯/移位指令會根據結果更新 SF、ZF、CF、OF、PF、AF。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved