190 likes | 319 Views
Boolean and Comparison Instructions. AND 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)
E N D
AND 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
Application:Converting 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
OR 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
Application: 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)
Application:Determining the sign of a value by ORing register with itself OR al, al
XOR 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
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 al, 10110101b XOR al, 0 ; al unchanged parity flag clear (PO) Mov al, 11001100b XOR 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 ;0110 0100 1100 0001 XOR ah, al ;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
In 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
In 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
In Class Problems • Write a single instruction that complements all the bits in EAX (do not use the NOT instruction) XOR EAX, FFFFFFFFh
In 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