4.3.4. AND、ORR、EOR、BIC 和 ORN

逻辑“与”、“或”、“异或”、位清除和“或非”。

语法

op{S}{cond} Rd, Rn, Operand2

其中:

op

是下列项之一:

AND

逻辑“与”。

ORR

逻辑“或”。

EOR

逻辑“异或”。

BIC

逻辑“与非”。

ORN

逻辑“或非”(仅 Thumb-2)。

S

是一个可选的后缀。 如果指定 S,则会更新运算结果的条件代码标记(请参阅条件执行)。

cond

是一个可选的条件代码(请参阅条件执行)。

Rd

是目标寄存器。

Rn

是存放第一个操作数的寄存器。

Operand2

是一个灵活的第二操作数。 有关此选项的详细信息,请参阅灵活的第二操作数

用法

ANDEORORR 指令可对 RnOperand2 中的值按位进行“与”、“异或”和“或”运算。

BIC(位清除)指令对 Rn 中的位和 Operand2 值中相应位的补码进行逻辑“与”运算。

ORN Thumb-2 指令对 Rn 中的位和 Operand2 值中相应位的补码进行逻辑“或”运算。

在某些情况下,汇编器可能会用 AND 替换 BIC,用 BIC 替换 AND,用 ORR 替换 ORN,或用 ORN 替换 ORR。 阅读反汇编列表时请注意这一点。 有关详细信息,请参阅指令替换

在 Thumb-2 指令中使用 pc

在所有这些指令当中,均不能将 pc (r15) 用于 Rd 或任何操作数。

在 ARM 指令中使用 pc

Note

这些 ARM 指令中都不提倡使用 pc。

如果将 pc 用作 Rn,则所用的值为指令地址加 8。

如果将 pc 用作 Rd,则:

  • 代码将跳转到与结果相对应的地址执行。

  • 如果使用 S 后缀,则当前模式的 SPSR 会复制到 CPSR。 您可利用此机制从异常中返回(请参阅《开发指南》中的第 6 章 处理处理器异常)。

Caution

在用户模式和系统模式下,若是将 pc 用作 Rd,则不要使用 S 后缀。 此类指令的结果不可预知,而且汇编器在汇编时不会发出警告。

在所有由寄存器控制移位的数据处理指令中,都不能将 pc 用于任何操作数(请参阅灵活的第二操作数)。

条件标记

如果指定了 S,则这些指令将:

  • 根据结果来更新 N 和 Z 标记。

  • Operand2 的计算过程中更新 C 标记(请参阅灵活的第二操作数

  • 不影响 V 标记。

16 位指令

这些指令的下列形式可用于 Thumb-2 之前的 Thumb 代码中,在 Thumb-2 代码中使用时为 16 位指令:

ANDS Rd, Rd, Rm

RdRm 必须都是 Lo 寄存器。

EORS Rd, Rd, Rm

RdRm 必须都是 Lo 寄存器。

ORRS Rd, Rd, Rm

RdRm 必须都是 Lo 寄存器。

BICS Rd, Rd, Rm

RdRm 必须都是 Lo 寄存器。

在前三种情况下,指定和不指定 OPS Rd, Rm, Rd 都可以。 指令是相同的。

示例

    AND     r9,r2,#0xFF00
    ORREQ   r2,r0,r5
    EORS    r0,r0,r3,ROR r6
    ANDS    r9, r8, #0x19
    EORS    r7, r11, #0x18181818 
    BIC     r0, r1, #0xab
    ORN     r7, r11, r14, ROR #4
    ORNS    r7, r11, r14, ASR #32

不正确的示例

    EORS    r0,pc,r3,ROR r6     ; pc not permitted with register
                                ; controlled shift
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential