我需要计算一个 32 位数字的奇偶校验并返回它。为此,我必须使用 XOR、SHR、SETP(或类似)和 movzx。有人有想法吗?
问问题
1911 次
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 回答