我看到在x86 CPU中,当设置为1的位数是偶数时,奇偶校验标志(PF)被设置,并且只测试一个值的第一个字节(低8位)。
我不确定的唯一情况是我们处理的值是0。
我至少看到了其他问题,其中奇偶校验标志似乎设置为1,值为0。
例如,对于值8000h,低8位全部为0,并且奇偶校验标志被设置为1.
那么,我是否应该接受0位设置为1,奇偶校验标志被启用,就像设置为1的偶数位一样?
答案 0 :(得分:6)
0的位数是偶数,所以答案是肯定的。
测试:
// compiled with Open Watcom C/C++ 1.9
#include <stdio.h>
unsigned parity(unsigned v)
{
unsigned p = 0;
__asm
{
mov eax, v
or eax, eax
pushf
pop eax
shr eax, 2
and eax, 1
mov p, eax
}
return p;
}
int main(void)
{
unsigned i;
for (i = 0; i < 8; i++)
printf("PF(%u) = %u\n", i, parity(i));
return 0;
}
输出:
PF(0) = 1
PF(1) = 0
PF(2) = 0
PF(3) = 1
PF(4) = 0
PF(5) = 1
PF(6) = 1
PF(7) = 0