问题
I need to calculate the parity of a 32 bits number and return it. To do this I must use XOR, SHR,SETP(or similar) and movzx. Somebody have an idea ?
回答1:
Many ways to do this, of course. If you decide to use the hardware parity flag, keep in mind that it only checks the low 8 bits. A solution using this approach might be to process your 32 bit input as four 8 bit values, and use XOR
on the partial results:
p(31:0) = p(31:24) ^ p(23:16) ^ p(15:8) ^ p(7:0)
To get the 8 bit units, you can use SHR
and to get the partial values you can XOR
, use the SETP
. This should be enough to get you started.
Another, possibly more efficient, option is to XOR the bytes and grab the parity of them:
p(31:0) = p(31:24 ^ 23:16 ^ 15:8 ^ 7:0)
回答2:
Use this code:
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
来源:https://stackoverflow.com/questions/27040875/how-to-calculate-parity-of-a-32bits-number-in-assembly