4. 逻辑和位指令¶
4.1. 文档约定¶
符号:表示 ARM 寄存器 R0-R7,特殊指令除外,其中可能使用 R0-R15。表示一个 ARM 寄存器,其内容必须在 range 内。对于具有两个寄存器参数的指令,允许它们相同。例如,无论其初始内容如何,以下内容都会将 R0 (Python )归零。Rd, Rn
Rn<a-b>
a <= contents <= b
R0 ^= R0
eor(r0, r0)
除非另有说明,否则这些指令会影响条件标志。
4.2. 逻辑指令¶
and_(Rd, Rn)
Rd &= Rn
orr(Rd, Rn)
Rd |= Rn
eor(Rd, Rn)
Rd ^= Rn
mvn(Rd, Rn)即 Rd = 1 的 Rn 补码
Rd = Rn ^ 0xffffffff
bic(Rd, Rn)使用 Rn 中的掩码清除 Rd
Rd &= ~Rn
请注意使用“and_”而不是“and”,因为“and”是 Python 中的保留关键字。
4.3. 移位和旋转指令¶
lsl(Rd, Rn<0-31>)
Rd <<= Rn
lsr(Rd, Rn<1-32>)逻辑右移
Rd = (Rd & 0xffffffff) >> Rn
asr(Rd, Rn<1-32>)算术右移
Rd >>= Rn
ror(Rd, Rn<1-31>) Rd 向右循环 Rn 位。
Rd = rotate_right(Rd, Rn)
旋转(例如)三位的工作原理如下。如果 Rd在旋转后最初包含位,它将包含 b31 b30..b0
after rotation it will contain b2 b1 b0 b31 b30..b3
4.4. 特殊说明¶
条件代码不受这些指令的影响。
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) 返回 Rn 中第一个二进制一位之前的二进制零位的数量。
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) 返回 Rn 的位反转内容。如果 Rn 包含位Rd 将被设置为b31 b30..b0
b0 b1 b2..b31
可以通过在执行 clz 之前执行位反转来计算尾随零。