-5

我需要计算一个 32 位数字的奇偶校验并返回它。为此,我必须使用 XOR、SHR、SETP(或类似)和 movzx。有人有想法吗?

4

2 回答 2

3

当然,有很多方法可以做到这一点。如果您决定使用硬件奇偶校验标志,请记住它只检查低 8 位。使用这种方法的解决方案可能是将您的 32 位输入处理为四个 8 位值,并用于XOR部分结果:

p(31:0) = p(31:24) ^ p(23:16) ^ p(15:8) ^ p(7:0)

要获得 8 位单位,您可以使用SHR和 要获得部分值XOR,请使用SETP. 这应该足以让你开始。

另一个可能更有效的选项是对字节进行异或并获取它们的奇偶校验:

p(31:0) = p(31:24 ^ 23:16 ^ 15:8 ^ 7:0)

于 2014-11-20T13:51:25.037 回答
-2

使用此代码:

    mov ebx, 1234 ;Replace this number with the value of which you want to know the parity
    mov cx, 4
a:
    or bl,  bl
    lahf
    ror eax, 8
    ror ebx, 8
    loop a
    xor ah, al
    ror eax, 16
    xor al, ah
    rol eax, 8
    xor ah, al
    and ah, 4
    sahf ;now the parity flag is defined
于 2014-11-23T13:40:49.953 回答