什么是X86控制流操作中的BitWiseXorNor?

时间:2014-03-25 20:05:26

标签: assembly x86 control-flow ia-32

wiki

test arg1, arg2

我可以看到根据这些改变了标志:

  1. SF< - MostSignificantBit(Temp)
  2. 如果Temp == 0 ZF< - 1,则ZF< - 0
  3. PF< - BitWiseXorNor(Temp [Max-1:0])
  4. CF< - 0
  5. OF< - 0
  6. AF未定义

    所以我的问题是:

    什么是 BitWiseXorNor ?什么是最大

2 个答案:

答案 0 :(得分:4)

PF是一个奇偶校验标志,表示低字节中的位奇偶校验。因此,如果得到的位数是偶数,则设置它。如果位数是奇数,则不设置。

维基文本有点令人困惑,但BitWiseXorNor函数在逻辑上看起来是......

bool bwxnor(bool b0, bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7) {

    return ~(((((((b0 ^ b1) ^ b2) ^ b3) ^ b4) ^ b5) ^ b6) ^ b7)
}

另一种思考PF的方法是1 - (sum(temp[0:7]) % 2)

答案 1 :(得分:0)

BitWiseXorNor,一个假设,意味着 - 将参数的所有位异或,然后反转。 Max表示最大位位置。 7表示一个字节,15表示一个字,31表示双字,等等。所以Temp[Max-1:0]表示Temp的所有位,除了最左边的一个。

如果输入中存在奇数个1位,则将位串中的所有位进行异或运算产生1,如果偶数则为0。这是奇偶校验标志(PF)应该接收的值的倒数。反转XOR运算的结果可以得到PF的值。

我可能错了Max。也许这意味着位数 - 字节为8,字为16,等等。我可以从Temp的数据类型中推断出来。