Boolean and Comparison Instructions

advertisement
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
Download