EFLAGS 32位 二进制表格
CF (进位标志)
在 EFLAGS 中占用第0位。
当运算的结果在最高有效位产生进位或借位则将CF置为1,否则为0。
如:
MOV AL,0xFF
MOV BL,0x1
ADD AL,BL
0xFF的二进制为 1111 1111,0x1的二进制为 0000 0001,相加后的结果为:1 0000 0000
运算结果的最高位发生进位,所以CF会置为1
PF (奇偶标志位)
当运算的结果有效位的二进制中的1的个数为偶数时则将PF置为1,否则为0。
如:
MOV AL,0x2
ADD AL,0x1
结果为 0x3,二进制为 0000 0011,二进制的1为两个,为偶数,则PF会置为1。
如:
MOV AX,0x1112
ADD AX,0x1
结果为 0x1113,二进制为 0001 0001 0001 0011,二进制的1为五个,为奇数,则PF会置为0。
AF(辅助进位标志位)
当运算的结果的二进制 低位向高位进位时,则将AF置为1,否则置为0。
如:
MOV AL,0xF
ADD AL,0x1
结果为 0x10,0xF的二进制为 0000 1111,加1后变成 0001 0000,向前进了一位,AF则置为1。
ZF(零标志位)
当运算的结果为0的时候,ZF将置位为1。
SF(符号标志位)
SF在 EFLAGS 寄存器占第7位,当运算的结果二进制最高位位1的时候,则SF置为1。
如:
MOV AL,0x7F
ADD AL,0x1
0x7F的二进制为:0111 1111,加1就是 1111 1111,最高位变成1,则置为SF。
OF(溢出标志位)
运算结果超出当前运算数所能表示的正,负数范围,则为溢出。
正 + 正 = 正 (如果结果为负数说明正数范围溢出)
负 + 负 = 负(如果结果为正数说明负数范围溢出)
正 + 负 (不会溢出)
首先得知道什么是原码,反码,补码。
原码:
1 的原码: 0000 0001
-1 的原码: 1000 0001
原码在正数的首位是0,负数则为1,首位也是符号位。
反码:
1的反码:0000 0001
-1的反码:1111 1110
正数的反码不变,负数的反码符号位不变,其余的所有位进行取反。
补码:
1的补码:0000 0001
-1的补码:1000 0010
正数的补码不变,负数的补码将最后以为加1。
进入OF正题:
0x7F 的二进制是:0111 1111,符号位是0,说明是正数,如果将0x7F + 1,结果是0x80
0x80 的二进制是:1000 0000,符号位是1,说明是负数。
整个过程就是一个正数加上一个正数,得出一个负数,结果是数据范围大小溢出了,OF置为1