指令对标志寄存器的影响
请点开看,简介形式表格会结构混乱。
指令类型 | 助记符 | 对标志寄存器的影响 | 备注 | ||||||||||||||||||||||
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,AF未定义 | ||||||||||||||||||||
ROR | √ | √ | ? | ||||||||||||||||||||||
RCL | √ | √ | ? | ||||||||||||||||||||||
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 | 影响所有标志位 | 标志位到恢复中断以前的状态 | |||||||||||||||||||||||
CPU控制指令 |
标志位操作 |
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时,正常执行程序。
页面下部广告