CPU的状态标识位
CPU的状态标识位有以下的几个:
CF:反映无符号运算是否产生进位或借位,是则CF=1,否则CF=0。
PF:反映运算结果低8位中1的个数,1的个数为偶数,则PF=1,否则PF=0。
AF:在字节操作时低半字节向高半字节进位或借位时,字操作时低字节向高字节进位或借位时,AF=1,否则AF=0。
ZF:反映运算结果是否为0,结果为0时ZF=1,否则ZF=0。
SF:反映运算结果是否为负,结果为负时SF=1,否则SF=0。
OF:反映有符号运算结果是否溢出,结果溢出时OF=1,否则OF=0。
IF:中断标志。
DF:方向标志。
某些标识位可以通过指令直接来改变,如下面的指令:
CLC
清除进位标志。
OF | DF | IF | SF | ZF | AF | PF | CF |
0 |
说明:清除进位标志。
指令格式:clc
STC
设置进位标志。
OF | DF | IF | SF | ZF | AF | PF | CF |
1 |
说明:设置进位标志。
指令格式:stc
CMC
进位标志取反。
OF | DF | IF | SF | ZF | AF | PF | CF |
|
|
|
|
|
|
| * |
说明:当前进位标志取反。
指令格式:cmc。
CLD
清除方向标志。
OF | DF | IF | SF | ZF | AF | PF | CF |
0 |
说明:清除方向标志。此时,字符串指令自动增加(E)SI和(E)DI的值。
指令格式:cld
STD
设置方向标志。
OF | DF | IF | SF | ZF | AF | PF | CF |
1 |
说明:设置方向标志。导致字符串操作指令自动减少(E)SI和(E)DI的值,这样字符串处理就能从高地址向低地址进行。
指令格式:std
CLI
清除中断标志。
OF | DF | IF | SF | ZF | AF | PF | CF |
0 |
说明:清除中断标志。禁止可屏蔽硬件中断,知道执行一条STI指令为止。
指令格式:cli
STI
设置中断标志。
OF | DF | IF | SF | ZF | AF | PF | CF |
1 |
说明:设置中断标志。允许可屏蔽中断。中断发生时自动禁止中断,因此中断处理程序应使用STI立即重新允许中断。
指令格式:sti
其它的标识位并没有特殊的指令,但是通过一些操作也是可以控制的,比如CF和AF,通过加减时的进位就可以设置或者清除。
另外还有两个指令:LAHF和SAHF,通过它们可以将标识位在AH和CPU标识寄存器之间进行切换:
LAHF
将标志送到AH。
OF | DF | IF | SF | ZF | AF | PF | CF |
说明:复制下列标志到AH:符号标志、零标志、辅助进位标志、奇偶标志和进位标志。
指令格式:lahf
SAHF
将AH的值送到标志寄存器。
OF | DF | IF | SF | ZF | AF | PF | CF |
|
|
| * | * | * | * | * |
说明:复制AH到标志寄存器的0到7位中。
指令格式:sahf
可以看到,实际上也并不是可以改变所有的寄存器标志位,只能改变其中的SF/ZF/AF/PF/CF。