Boolean and Comparison Instructions Operation Description AND AND Destination, Source OR OR Destination, Source XOR XOR Destination, Source NOT NOT Destination Implied AND Destination, Source, Only FLAGS changed TEST BT,BTC,BTR, BTS AND Instruction Bitwise AND (result placed in destination) Mov And al, 00001111b al, 00111011b al = 00001011b (0Bh) • Mov And • • • • • al = ? al, 6Dh 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 Application:Converting Characters to Uppercase Lowercase A (‘a’) is 61 Uppercase A (‘A’) is 41 Need to clear bit 5 Mov AND al, 61h al, 11011111b ;al = 41h 01100001 01000001 ;(DFh) OR Instruction Bitwise OR (result placed in destination) Mov al, 0Fh Or al, 61h • Mov al, 3Dh Or al, 74h • al = ? al = 6Fh 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 Application: Converting a Decimal Digit (byte) to ASCII Binary representation for 9 0 0 0 0 1 0 0 1 Ascii 9 is 39h 00111001 Need to set bits 4 and 5 Mov al, 9 OR al, 30h ;al = 00111001b (39h) Application:Determining the sign of a value by ORing register with itself OR al, al Zero Flag Sign Flag Value in AL is … clear clear greater than 0 set clear equal to 0 clear set less than 0 XOR Instruction • • • Bitwise XOR (result stored in destination) Mov XOR al, 94h al, 37h Mov Xor al, 72h al, 0DCh al = ? al = 10100011b 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 Parity 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 XOR Mov XOR al, 10110101b al, 0 ; al unchanged parity flag clear (PO) al, 11001100b al, 0 ; al unchanged parity flag set (PE) Application:How to check the parity of 16-bit registers Perform an XOR between upper-and lower bytes Mov ax, 64C1h XOR ah, al ;0110 0100 1100 0001 ;ah = 10100101 Parity bit set (PE) Application: 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) NOT Instruction Toggles all bits in an operand No flags are affected TEST 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 CMP Instruction • Implied SUB (no registers are changed) (flags may be modified) May modify Overflow, Sign, Zero, Aux. Carry, and Parity flags CMP Instruction Results Zero Flag Carry Flag CMP Results 0 1 destination < source CMP 5, 10 0 0 destination > source CMP 105, 10 1 0 destination = source CMP 10, 10 CMP of Signed Integers Flags CMP Results SF ≠ OF destination < source SF = OF destination > source ZF = 1 destination = source In Class Problems 1. Write a single instruction that clears the high 8 bits of AX and does not change the low 8 bits. AND AX, 00FFh In Class Problems 2. Write a single instruction that sets the high 8 bits of AX and does not change the low 8 bits. OR AX, FF00h In Class Problems 3. Write a single instruction that complements all the bits in EAX (do not use the NOT instruction) XOR EAX, FFFFFFFFh In Class Problems 4. 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