32位标志寄存器EFLAGS及标志位操作指令



标志寄存器用来保存在一条指令执行完成后,CPU所处状态的信息及运算结果的特征。

16位标志寄存器 FLAGS

32位标志寄存器 EFLAGS

 

SF:若运算结果为负(即结果的最高位为1,因为机器内的数据都是以补码形式表示)则SF=1,否则SF=0

ZF:若运算结果为0,则ZF=1,否则ZF=0

OF:当将操作数作为有符号数看时,用该标志位判断运算结果是否溢出

         加法:若同符号数相加,而结果符号与之相反,则OF=1.否则OF=0

         减法:被减数与减数异号,而结果的符号与减数相同则OF=1,否则OF=0

(比如5-(-3)的话,结果不应该与减数相同)

CF:将操作数作为无符号数时,用该标志位判断运算结果是否发生了进位或错位。

         加法:若运算结果从字或字节的最高位向前产生了进位则CF=1,否则CF=0。

         减法:两数相减,若够减无借位,则CF=0,否则CF=1

PF:当运算结果( 只考虑低8位)中1的个数为偶数时,PF=1,否则PF=0。此标志位主要用于检测数据在传输过程中的错误

AF:标识做字节运算时低办字节向高半字节的进位和借位

DF:控制串操作指令的处理方向

         DF=0,从低地址向高地址,即每次操作后SI、DI递增

         DF=1,从高地址向低地址,即每次操作后SI、DI递减

IF:控制CPU是否允许响应外设的中断请求

         IF=0,关中断,CPU屏蔽外设的中断请求

         IF=1,开中断,CPU响应外设的中断请求

TF(Trap Flag):控制单步执行

         TF=0,CPU连续工作

         TF=1,CPU单步执行

 

标志位操作指令

LAHF

功能:将标志寄存器的低8位--->AH

说明:无操作数,也不影响标志位

SAHF

功能:AH -à标志寄存器低8位

说明:标志寄存器原来低8位被冲掉,以AH中的内容取代。该指令不影响高字节内容,因为高字节主要是DF、IF、TF等控制标志,不可以随便改变

PUSHF

功能:标志寄存器内容压入堆栈,即

           (SP)-2 -->SP  (FLAGS) -->(SP)

PUSHFD

            (ESP)-4-->ESP  (EFLAGS) -->(ESP)

POPF/POPFD

功能:将栈顶内容送入标志寄存器

CLC

功能;置CF=0

CMC

功能:使CF取反

STC

功能:CF=1

CLD

功能:DF=0

STD

功能:DF=1

CLI

功能:IF=0

STI

功能:IF=1

posted on 2015-11-05 12:27  xueyoo  阅读(1686)  评论(0)    收藏  举报

导航