80x86汇编语言标志位(PSW,EFLAGS,RFLAGS)
8086/8088 的 PSW
PSW用来存放两类信息:一类是体现当前指令执行结果的各种状态信息,如有无进位(CY位),有无溢出(OV位),结果正负(SF位),结果是否为零(ZF位),奇偶标志位(P位)等;另一类是存放控制信息,如允许中断(IF位),跟踪标志(TF位)等。有些机器中将PSW称为标志寄存器FR(Flag Register)。
---------------------------------------------------------------------------------
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | OF | DF | IF | TF | SF | ZF | | AF | | PF | | CF |
条件码标志:
OF:(Overflow Flag)溢出标志,在运算过程中,如操作数超出了机器能表示的范围则称为溢出。此时OF标志位为1(OV),否则置0(NV)。
SF:(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1(NG),否则置0(PL)。
ZF:(Zero Flag)零标志,运算结果为0时置1(ZR),否则置0(NZ)。
CF:(Carry Flag)进位标志,运算时,从最高有效位产生了进位值时0时置1(CY),否则置0(NC)。
AF:(Auxiliary carry Flag)辅助进位标志,记录运算时最低的4位(半个字节)产生的进位值。有进位值时置1否(AC),则置0(NA)。
PF:(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件,当结果操作数中1的个数为偶数时置1(PE),否则置0(PO)。
控制标志:
DF:(Direction Flag)方向标志,在串处理指令中控制处理信息的方向用,当DF置1(DN)每次操作后,使变址寄存器SI和DI减量,这样就使串处理从高地址向低地址方向处理。当DF置0(UP)时,则反之。
IF:(Interrupt Flag)中断标志,当IF为1(EI)时,允许中断,否则IF为0(DI)关闭中断。
TF:(Trap Flag)陷井标志,用于单步方式操作,当TF为1时,每条指令执行完后产生陷井,由系统控制计算机;当IF为0时,CPU正常工作不产生陷井。
---------------------------------------------------------------------------------
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | OF | DF | IF | TF | SF | ZF | | AF | | PF | | CF |
条件码标志:
OF:(Overflow Flag)溢出标志,在运算过程中,如操作数超出了机器能表示的范围则称为溢出。此时OF标志位为1(OV),否则置0(NV)。
SF:(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1(NG),否则置0(PL)。
ZF:(Zero Flag)零标志,运算结果为0时置1(ZR),否则置0(NZ)。
CF:(Carry Flag)进位标志,运算时,从最高有效位产生了进位值时0时置1(CY),否则置0(NC)。
AF:(Auxiliary carry Flag)辅助进位标志,记录运算时最低的4位(半个字节)产生的进位值。有进位值时置1否(AC),则置0(NA)。
PF:(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件,当结果操作数中1的个数为偶数时置1(PE),否则置0(PO)。
控制标志:
DF:(Direction Flag)方向标志,在串处理指令中控制处理信息的方向用,当DF置1(DN)每次操作后,使变址寄存器SI和DI减量,这样就使串处理从高地址向低地址方向处理。当DF置0(UP)时,则反之。
IF:(Interrupt Flag)中断标志,当IF为1(EI)时,允许中断,否则IF为0(DI)关闭中断。
TF:(Trap Flag)陷井标志,用于单步方式操作,当TF为1时,每条指令执行完后产生陷井,由系统控制计算机;当IF为0时,CPU正常工作不产生陷井。
RFLAGS(64位)/EFLAGS(32位)
RFLAGS(64位)将EFLAGS(32位)扩展到64位,新扩展的高32位全部保留未用。
RFLAGS(32位)由3类(S: Status flag,C: Control flag,X: System flag)标志位组成:
63-32 31-22 21 20 19 18 17 16
| RFlags保留 | EFlags保留 | ID | VIP | VIF | AC | VM | RF |
15 14 13-12 11 10 9 8 7 6 5 4 3 2 1 0
| | NT | IOPL | OF | DF | IF | TF | SF | ZF | | AF | | PF | | CF |
System flag:
ID:Identification(Pentium+)。
VIP:Virtual interrupt pending(Pentium+)。
VIF:Virtual interrupt flag (Pentium+)。
AC:Alignment check (486SX+ only)。
VM:Virtual 8086 mode flag (386+ only)
RF:Resume flag (386+ only)。
IOPL:I/O privilege level (286+ only)。
NT:Nested task flag (286+ only)。
IF:(Interrupt Flag)中断标志,当IF为1(EI)时,允许中断,否则IF为0(DI)关闭中断。
TF:(Trap Flag)陷井标志,用于单步方式操作,当TF为1时,每条指令执行完后产生陷井,由系统控制计算机;当IF为0时,CPU正常工作不产生陷井。
Control flag:
DF:(Direction Flag)方向标志,在串处理指令中控制处理信息的方向用,当DF置1(DN)每次操作后,使变址寄存器SI和DI减量,这样就使串处理从高地址向低地址方向处理。当DF置0(UP)时,则反之。
Status flag:
条件码标志有:
OF:(Overflow Flag)溢出标志,在运算过程中,如操作数超出了机器能表示的范围则称为溢出。此时OF标志位为1(OV),否则置0(NV)。
SF:(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1(NG),否则置0(PL)。
ZF:(Zero Flag)零标志,运算结果为0时置1(ZR),否则置0(NZ)。
CF:(Carry Flag)进位标志,运算时,从最高有效位产生了进位值时0时置1(CY),否则置0(NC)。
AF:(Auxiliary carry Flag)辅助进位标志,记录运算时最低的4位(半个字节)产生的进位值。有进位值时置1否(AC),则置0(NA)。
PF:(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件,当结果操作数中1的个数为偶数时置1(PE),否则置0(PO)。
RFLAGS(32位)由3类(S: Status flag,C: Control flag,X: System flag)标志位组成:
63-32 31-22 21 20 19 18 17 16
| RFlags保留 | EFlags保留 | ID | VIP | VIF | AC | VM | RF |
15 14 13-12 11 10 9 8 7 6 5 4 3 2 1 0
| | NT | IOPL | OF | DF | IF | TF | SF | ZF | | AF | | PF | | CF |
System flag:
ID:Identification(Pentium+)。
VIP:Virtual interrupt pending(Pentium+)。
VIF:Virtual interrupt flag (Pentium+)。
AC:Alignment check (486SX+ only)。
VM:Virtual 8086 mode flag (386+ only)
RF:Resume flag (386+ only)。
IOPL:I/O privilege level (286+ only)。
NT:Nested task flag (286+ only)。
IF:(Interrupt Flag)中断标志,当IF为1(EI)时,允许中断,否则IF为0(DI)关闭中断。
TF:(Trap Flag)陷井标志,用于单步方式操作,当TF为1时,每条指令执行完后产生陷井,由系统控制计算机;当IF为0时,CPU正常工作不产生陷井。
Control flag:
DF:(Direction Flag)方向标志,在串处理指令中控制处理信息的方向用,当DF置1(DN)每次操作后,使变址寄存器SI和DI减量,这样就使串处理从高地址向低地址方向处理。当DF置0(UP)时,则反之。
Status flag:
条件码标志有:
OF:(Overflow Flag)溢出标志,在运算过程中,如操作数超出了机器能表示的范围则称为溢出。此时OF标志位为1(OV),否则置0(NV)。
SF:(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1(NG),否则置0(PL)。
ZF:(Zero Flag)零标志,运算结果为0时置1(ZR),否则置0(NZ)。
CF:(Carry Flag)进位标志,运算时,从最高有效位产生了进位值时0时置1(CY),否则置0(NC)。
AF:(Auxiliary carry Flag)辅助进位标志,记录运算时最低的4位(半个字节)产生的进位值。有进位值时置1否(AC),则置0(NA)。
PF:(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件,当结果操作数中1的个数为偶数时置1(PE),否则置0(PO)。