x86中值为0的奇偶校验标志

时间:2013-04-11 22:12:52

标签: assembly x86 parity

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

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

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

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

那么,我是否应该接受0位设置为1,奇偶校验标志被启用,就像设置为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