指令类型助记符对标志寄存器的影响备注
ZF CF PF SF OF AF DF IF TF
数据传送类通用MOV
不影响标志位
交换XCHG
堆栈
操作
PUSH
POP
地址
传送
LEA
LDS
LES
累加器
专用IN
OUT
XALT
标志
寄存器
LAHF
SAHF 标志寄存器低八位的内容由AH的值决定CF,AF,ZF,SF,PF的值会被影响
PUSHF 不影响标志位
POPF 标志寄存器的内容由装入的具体值决定可能影响所有标志位
算术运算类加法
指令
ADD √√√√√√
ADC √√√√√√
INC √√√√√INC指令不影响CF
AAA ?√???√?表示不确定或者未定义
DAA √√√√?√
减法
指令
SUB √√√√√√
SBB √√√√√√
DEC √√√√√DEC指令不影响CF
AAS ?√???√
DAS √√√√?√DAA指令不影响OF
乘法
指令
MUL ?√??√?
IMUL ?√??√?
AAM √?√√??
除法
指令
DIV ??????√√此指令可能会产生中断,故影响IF,TF
IDIV ??????√√同上
AAD √?√√??
符号位
扩展
CBW 不影响标志位
CWD 不影响标志位
比较指令CMP 由计算结果确定标志位的值不会影响到DF,IF,TF
逻辑运算类单
操
作
数
逻
辑
指
求反NOT 不影响标志位
移位
SAL √√√√见
备
注
?OF标志位只在移位次数是1时
有效,AF未定义SHL √√√√?
SAR √√√√?
SHR √√√√?
循环
移位
ROL √√?
循环移位指令影响OF和CF,ROR √√?
令RCL √√?AF未定义RCR √√?
指令类型助记符对标志寄存器的影响备注
ZF CF PF SF OF AF DF IF TF
双操作数
与AND √置0 √√置0或OR √置0√√置0异或XOR √置0√√置0检测TSET √置0√√置0
字符串操作传送MOVS 不影响标志位
比较CMPS 由计算结果确定标志位的值不会影响DF,IF,TF 搜索SCAS 由计算结果确定标志位的值不会影响DF,IF,TF 装入LODS 不影响标志位
填充STOS 不影响标志位
前缀REP 不影响标志位
程序控制类无条件JMP
不影响标志位
条
件
转
移
指
令
单个
标志
位
JS/JNS SF=1/0,则转移到目的地址
JZ/ JNZ ZF=1/0,则转移到目的地址
JP/JNP PF=1/0,则转移到目的地址
JB/JNB CF=1/0,则转移到目的地址
JO/JNO OF=1/0,则转移到目的地址若干标
志位的
逻辑组
合
JA 两个无符号数比较,A>B
JBE 两个无符号数比较,A <=B
JG 两个带符号数比较,A>B
JGE 两个带符号数比较,A>=B
JL 两个带符号数比较,A<B
JLE 两个带符号数比较,A <=B
循环
控制
LOOP
不影响标志位
LOOPE
LOOPNE
JCXZ
中断
控制
INT 不影响标志位
INTO
IRET 影响所有标志位标志位到恢复中断以前的状态
C P U 控制指令标志位操
作
CLC √此指令置CF=0
CMC √此指令CF取反
STC √此指令置CF=1
CLD √此指令置DF=0
STD √此指令置DF=1
CLI √此指令置IF=0
STI √此指令置IF=1 空操作NOP
不影响标志位
暂停HLT
等待WAIT’
交权ESC
LOCK
总线锁
定前缀
CF(Carry Flag):进位标志。
当指令执行的结果(8位或16位)在最高位上产生了一个进位或借位时,CF =1。
AF(Auxiliary Carry Flag):辅助进位标志。
当一个8位数(或16位数)的低四位向高四位(即
b3向b4)有进位或借位时,AF=1。
常用于十进制算术运算指令。
OF(Overflow Flag): 溢出标志。
在算术运算中,带符号数的运算结果超出了8位或16位符号数所能表示的范围时,OF=1。
ZF(Zero Flag): 零标志。
当运算结果为全零时,ZF=1。
SF(Sign Flag): 符号标志。
当运算结果为正数,即结果的最高位为0时,SF=1。
PF(Parity Flag):奇偶标志。
当算术逻辑运算的结果中1的个数为偶数时,PF=1,为奇数时,PF=0。
DF(Direction Flag):方向标志。
用于控制数据串操作指令的步进方向,当DF=1时,表示从高地址向低地址以递减的顺序对数据串中的数据进行处理。
IF(Interrupt-enable Flag):中断允许标志。
当IF=1时,CPU可以响应外部可屏蔽中断请求。
该标志可以用指令设置为1或0。
TF(Trap Flag):陷阱标志。
当TF=1时,CPU进入单步工作方式,每执行完一条指令就自动产生一个内部中断,以便进行程序调试。
当TF=0时,正常执行程序。