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
通常用于获取所有位都设置的寄存器。