我看到在 x86 CPU 中,奇偶校验标志 (PF) 在设置为 1 的位数为偶数时设置,并且仅测试值的第一个字节(低 8 位)。
我不确定的唯一情况是当我们处理值 0 时。
我至少看到了其他问题,其中奇偶校验标志似乎设置为 1,值为 0。
例如,对于值 8000h,低 8 位全为 0,并且奇偶校验标志被称为设置为 1。
那么,我是否应该接受对于设置为 1 的 0 位,启用奇偶校验标志,就像设置为 1 的偶数位一样?
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