先看图
园子里找的图,再附上理论,具体操作等以后慢慢讲。
标志寄存器用来保存在一条指令执行完成后,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