x86 汇编/逻辑
外观
	
	
< X86 汇编
本页面的指令处理的是位级逻辑指令。有关位级逻辑的更多信息,请参阅 数字电路/逻辑运算。
本节中介绍的所有逻辑指令都在,顾名思义,算术逻辑单元中执行。
这些指令需要两个操作数。
| and 掩码, 目标 | GAS 语法 | 
| and 目标, 掩码 | Intel 语法 | 
and 对两个操作数执行位级与运算,并将结果存储在目标中。
见下文.
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
- and可以用来计算两个“集合”的交集,或表示“掩码”的值。一些编程语言要求布尔值完全存储为- 1或- 0。一个- and rax, 1将确保只有LSB被设置或没有被设置。
- 如果在所需的尺寸中没有部分寄存器寻址,可以使用and进行 运算,即整数除法的余数。为此,掩码必须包含值(即所有较低位都被设置,直到某个阈值),其中 等于你想要的除数。
| or 加数, 目标 | GAS 语法 | 
| or 目标, 加数 | Intel 语法 | 
or 指令对两个操作数执行位级或运算,并将结果存储在目标中。
见下文.
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
- or可以用来计算两个“集合”的并集,或表示“掩码”的值。
| xor 翻转, 目标 | GAS 语法 | 
| xor 目标, 翻转 | Intel 语法 | 
对两个操作数执行位级异或运算,并将结果存储在目标中。
见下文.
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
- xor rax, rax(或任何 GPR 两次) 将清除所有位。这是一个专门识别的单词。但是,由于- xor影响标志,它可能会引入错误的依赖关系。
- OF ≔ 0
- CF ≔ 0
- SF 变成计算出的 结果 的最高有效位的的值
- ZF ≔ 结果 = 0
- PF 根据结果设置
not 参数
对 参数 执行按位求反。
无。
movl $0x1, %edx ; edx ≔ 1
notl %edx ; edx ≔ ¬edx
; here edx would be 0xFFFFFFFE because a bitwise NOT 0x00000001 = 0xFFFFFFFE
- not通常用于获取所有位都设置的寄存器。