Assembler code example of parity calculation
|
The following Intel 8086 Assembler code tests the parity of a 16-bit unsigned integer specified in the AX register. If AX is even on entry, the carry flag will be clear. If it is odd on entry, the carry flag will be set. Note that this does not test the parity of the number of set bits (as used in telecommunications) but instead test the parity of the number.
Test the carry flag by using the JC (jump on carry) or JNC (jump on no carry) instructions.
SHR AX, 1
This 1-instruction routine, shifts the least significant bit (representing the 1's place) out. Effectively dividing the number by 2. The CPU sets the carry flag if the bit that was shifted out was set, otherwise it clears the carry flag. Another method follows:
AND AX, 1
This 1-instruction routine performs a bitwise 'AND' operation with the number stored in AX and the number 1. This routine differs in that it will set AX to 0 of the number was even and set AX to 1 if the number was odd.
Both of these instructions modify the value of AX. If the value of AX is required after the operation, the following method may be desired:
TEST AX, 1
NOTE: The "TEST" instruction actually performs a bitwise AND on its operands. It varies from the AND instruction only in that it does not store the result of this operation. With this method if AX is even on entry, the zero flag will be set. If AX is odd on entry, the zero flag will be cleared. Test the zero flag using the JZ (jump on zero) or JNZ (jump on no zero) instructions. This method is the most efficient on the Intel platform.
In all cases, only a single instruction is used. And in all cases the parity check takes place by simply testing the least significant bit of the number (rather than by factoring the number, which would require many more instructions and would be far less efficient).
See: Parity