2

我看到在 x86 CPU 中,奇偶校验标志 (PF) 在设置为 1 的位数为偶数时设置,并且仅测试值的第一个字节(低 8 位)。

我不确定的唯一情况是当我们处理值 0 时。

我至少看到了其他问题,其中奇偶校验标志似乎设置为 1,值为 0。

例如,对于值 8000h,低 8 位全为 0,并且奇偶校验标志被称为设置为 1。

那么,我是否应该接受对于设置为 1 的 0 位,启用奇偶校验标志,就像设置为 1 的偶数位一样?

4

1 回答 1

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
于 2013-04-11T22:45:50.347 回答