2

x86 CPU では、1 に設定されたビット数が偶数の場合にパリティ フラグ (PF) が設定され、値の最初のバイト (下位 8 ビット) のみがテストされることがわかりました。

私が確信していない唯一のケースは、値 0 を扱っている場合です。

パリティフラグが値0に対して1に設定されているように見える他の質問を少なくとも見ました。

たとえば、値が 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 に答える