How to calculate parity of a 32bits number in assembly?

2.5k views Asked by At

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 ?

2

There are 2 answers

7
Jester On BEST ANSWER

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)

1
Van Uitkon On

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