4.3.9. TST 和 TEQ

位测试和相等测试。

语法

TST{cond} Rn, Operand2
TEQ{cond} Rn, Operand2

其中:

cond

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

Rn

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

Operand2

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

用法

这些指令可利用 Operand2 来测试寄存器中的值。 它们会更新结果的条件标记,但不会将结果存入任何寄存器中。

TST 指令对 Rn 中的值和 Operand2 的值按位进行“与”运算。 除了结果会被丢弃以外,这与 ANDS 指令功能相同。

TEQ 指令对 Rn 中的值和 Operand2 的值按位进行“异或”运算。 除了结果会被丢弃以外,这与 EORS 指令功能相同。

利用 TEQ 指令可在不影响 V 或 C 标记的情况下,测试两个值是否相等(如同 CMP)。

TEQ 还可用于测试值的符号。 比较完毕后,两个操作数的符号位逻辑“异或”运算的结果将成为 N 标记。

使用 pc

对于 ARM 指令:

  • 如果将 pc (r15) 用作 Rn,则所用的值为指令地址加 8

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

对于 Thumb-2 指令,不能将 pc 用于 Rn,也不可将其用在 Operand2.

条件标记

这些指令将:

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

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

  • 不影响 V 标记。

16 位指令

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

TST Rn, Rm

RnRm 必须都是 Lo 寄存器。

示例

    TST     r0, #0x3F8
    TEQEQ   r10, r9
    TSTNE   r1, r5, ASR r1

不正确的示例

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