Assembly 奇偶校验标志使用“获取混合结果”;“一加零”;

Assembly 奇偶校验标志使用“获取混合结果”;“一加零”;,assembly,x86,fasm,Assembly,X86,Fasm,检查此代码 include 'win32ax.inc' ;.data .code start: mov al,00000001b add al,00000001b ;even =2 pf = 0 add al,00000001b ;odd =3 pf = 1 add al,00000001b ;even =4 pf = 0 sub al,00000001b ;odd =3 pf = 1 sub al,00000001b

检查此代码

include 'win32ax.inc'

;.data


.code

start:

mov al,00000001b

add al,00000001b   ;even  =2     pf = 0
add al,00000001b   ;odd   =3     pf = 1
add al,00000001b   ;even  =4     pf = 0
sub al,00000001b   ;odd   =3     pf = 1
sub al,00000001b   ;even  =2     pf = 0
sub al,00000001b   ;odd   =1     pf = 0
sub al,00000001b   ;even  =0     pf = 1

.end start 
最后两条减法指令应该设置PF=1,然后PF=0,为什么不设置呢

另外,我正在使用FASM,我正在使用ollydbg调试器进行调试。

来自维基百科:

在x86处理器中,奇偶校验标志仅反映结果中最低有效字节的奇偶校验,并且在1的设置位数为偶数时设置

所以


这是我的困惑,00000001b;奇数=3 pf=1子al,0000000 1b;奇数=1 pf=0它们都是奇数,但结果不同,如果是3,那么pf=1,如果是1 pf=0,实际上我仍然混淆pf设置,当1的数量为偶数或零时。0:0000 PF=1//1:0001 PF=0//2:0010 PF=0//3:0011 PF=1//4:0100 PF=0。因此,在您的示例中,仅当结果为0和3时才设置。
result = 0  an even number of ones are set so pf = 1 is the right answer
result = 1 an odd number of ones are set so pf = 0 is the right answer
result = 2 an odd number of ones are set so pf = 0 is the right answer
result = 3 an even number of ones are set so pf = 1 is the right answer

1 = 0b00000001  one bit is set an odd number of bits set pf = 0
3 = 0b00000011 two bits are set pf = 1
7 = 0b00000111 three bits are set pf = 0
12 = 0b00001100 two bits are set pf = 1