Understanding Bitwise Operations: AND, OR, XOR, and Their Applications
This guide covers fundamental bitwise operations like AND, OR, and XOR in assembly language programming. It explains how these operations manipulate bits in registers and affects flags such as Overflow, Carry, Sign, Zero, and Parity. Key applications include converting characters to uppercase, determining value signs, and checking parity in registers. Learn through practical instruction examples, including how to clear or set specific bits in registers and check conditions using operations that maintain or modify flags effectively.
Understanding Bitwise Operations: AND, OR, XOR, and Their Applications
E N D
Presentation Transcript
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