X86 Assembly/Logic
Logical instructions
The instructions on this page deal with bit-wise logical instructions. For more information about bit-wise logic, see Digital Circuits/Logic Operations.
All logical instructions presented in this section are executed in the, as the name already suggests, the arithmetic logic unit.
binary operations
These instructions require two operands.
logical and
operation
and performs a bit-wise and of the two operands, and stores the result in destination.
side effects
example
movl $0x1, %edx ; edx ≔ 1
movl $0x0, %ecx ; ecx ≔ 0
andl %edx, %ecx ; ecx ≔ edx ∧ ecx
; here ecx would be 0 because 1 ∧ 0 ⇔ 0
application
- An
andcan be used to calculate the intersection of two “sets”, or a value representing a “mask”. Some programming language require that Boolean values are stored exactly as either1or0. Anand rax, 1will ensure only the Template:Abbr is set, or not set. - If partial register addressing is not available in the desired size, an
andcan be used for a operation, that is the remainder of integer division. For that, mask has to contain the value (i. e. all lower bits set until a certain threshold), where equals your desired divisor.
logical or
operation
The or instruction performs a bit-wise or of the two operands, and stores the result in destination.
side effects
example
movl $0x1, %edx ; edx ≔ 1
movl $0x0, %ecx ; ecx ≔ 0
orl %edx, %ecx ; ecx ≔ edx ∨ ecx
; here ecx would be 1 because 1 ∨ 0 ⇔ 1
application
- An
orcan be used to calculate the union of two “sets”, or a value representing a “mask”.
logical xor
operation
Performs a bit-wise xor of the two operands, and stores the result in destination.
side effects
example
movl $0x1, %edx ; edx ≔ 1
movl $0x0, %ecx ; ecx ≔ 0
xorl %edx, %ecx ; ecx ≔ edx ⊕ ecx
; here ecx would be 1 because 1 ⊕ 0 ⇔ 1
application
xor rax, rax(or any Template:Abbr twice) will clear all bits. It is a specially recognized word. However, sincexoraffects flags it might introduce bogus dependencies.
common remarks
side effects for and, or, and xor
- Template:Abbr ≔ 0
- Template:Abbr ≔ 0
- Template:Abbr becomes the value of the most significant bit of the calculated result
- Template:Abbr ≔ result = 0
- Template:Abbr is set according to the result
unary operations
logical not
operation
Performs a bit-wise inversion of argument.
side-effects
None.
example
movl $0x1, %edx ; edx ≔ 1
notl %edx ; edx ≔ ¬edx
; here edx would be 0xFFFFFFFE because a bitwise NOT 0x00000001 = 0xFFFFFFFE
application
notis frequently used to get a register with all bits set.