Title: Boolean and Comparison Instructions
1Boolean and Comparison Instructions
Operation Description
AND AND Destination, Source
OR OR Destination, Source
XOR XOR Destination, Source
NOT NOT Destination
TEST Implied AND Destination, Source, Only FLAGS changed
BT,BTC,BTR,BTS
2AND Instruction
- Bitwise AND (result placed in destination)
- Mov al, 00001111b
- And al, 00111011b al ?
- al 00001011b (0Bh)
- Mov al, 6Dh
- And al, 4Ah al ?
- al 48h
- AND with a 0 to clear bits
- AND with a 1 to preserve bits (bit extraction)
- Always clears the Overflow and Carry flags.
- May modify the Sign, Zero, and Parity flag
3ApplicationConverting Characters to Uppercase
- Lowercase A (a) is 61 0 1 1 0 0 0 0 1
- Uppercase A (A) is 41 0 1 0 0 0 0 0 1
- Need to clear bit 5
-
- Mov al, 61h
- AND al, 11011111b (DFh)
- al 41h
4OR Instruction
- Bitwise OR (result placed in destination)
- Mov al, 0Fh
- Or al, 61h al ?
- al 6Fh
- Mov al, 3Dh
- Or al, 74h al ?
- al 7Dh
- OR with 1 to set selected bits
- OR with 0 to preserve bits
- Always clears the Overflow and Carry Flags
- May modify the Sign, Zero, and Parity Flags
5Application Converting a Decimal Digit (byte) to
ASCII
- Binary representation for 9 0 0 0 0 1 0 0 1
- Ascii 9 is 39h 0 0 1 1 1 0 0 1
- Need to set bits 4 and 5
- Mov al, 9
- OR al, 30h
- al 00111001b (39h)
6ApplicationDetermining the sign of a value by
ORing register with itself
Zero Flag Sign Flag Value in AL is
clear clear greater than 0
set clear equal to 0
clear set less than 0
7XOR Instruction
- Bitwise XOR (result stored in destination)
- Mov al, 94h
- XOR al, 37h al ?
- al 10100011b
- Mov al, 72h
- Xor al, 0DCh al ?
- al 10101110b
- XOR reverses itself when applied twice to the
same operand (data encryption) - Clears the Overflow and Carry flags.
- May modify the sign, zero, and parity flags
8Parity Flag
- Indicates if the LOWEST BYTE of the result of a
bitwise or arithmetic operation has an even or
odd number of 1 bits. -
- Mov al, 10110101b
- XOR al, 0
- al unchanged parity flag clear (PO)
- Mov al, 11001100b
- XOR al, 0
- al unchanged parity flag set (PE)
9ApplicationHow to check the parity of 16-bit
registers
- Perform an XOR between upper-and lower bytes
- Mov ax, 64C1h 0110 0100 1100 0001
- XOR ah, al
- ah 10100101
- Parity bit set (PE)
10Application How to check the parity of 32-bit
registers
- Perform an XOR between bytes
- Mov eax, 56D764C1h
- 0101 0110 1101 0111 0110 0100 1100 0001
- XOR ah, al ah 1010 0101
- Shr eax, 8
- XOR ah, al ah 0111 0010
- Shr eax, 8
- XOR ah, al ah 0010 0100
- Parity bit set (PE)
11NOT Instruction
- Toggles all bits in an operand
- No flags are affected
12TEST Instruction
- Implied AND (no registers are changed)
- (flags may be modified)
- Valuable for determining if individual bits are
set. - Always clears the Overflow and Carry flags
- May modify the sign, zero, and parity flags
13CMP Instruction
- Implied SUB (no registers are changed)
- (flags may be modified)
- May modify Overflow, Sign, Zero, Aux. Carry, and
Parity flags
14CMP Instruction Results
Zero Flag Carry Flag CMP Results
0 1 destination lt source CMP 5, 10
0 0 destination gt source CMP 105, 10
1 0 destination source CMP 10, 10
15CMP of Signed Integers
Flags CMP Results
SF ? OF destination lt source
SF OF destination gt source
ZF 1 destination source
16In Class Problems
- Write a single instruction that clears the high 8
bits of AX and does not change the low 8 bits. - AND AX, 00FFh
17In Class Problems
- Write a single instruction that sets the high 8
bits of AX and does not change the low 8 bits. - OR AX, FF00h
18In Class Problems
- Write a single instruction that complements all
the bits in EAX (do not use the NOT instruction) - XOR EAX, FFFFFFFFh
19In Class Problems
- Write instructions that set the Zero flag if the
32-bit value in EAX is even, and clear the Zero
flag if EAX is odd. - TEST EAX, 0000 0000 0000 0000 0000 0000 0000
0001b