ARM 指令集 比较指令
译注:CMP 和 CMP 是算术指令,TEQ 和 TST 是逻辑指令。把它们归 入一类的原因是它们的 S 位总是设置的,就是说,它们总是影响标志位。 CMN : 比较取负的值(CompareNegative)
CMN{条件}{P} , status = op_1 - (- op_2)CMN 同于 CMP,但它允许你与小 负值(操作数 2 的取负的值)进行比较,比如难于用其他方法实现的用于结束列 表的 -1。这样与 -1 比较将使用:CMN
R0, #1
; 把 R0
与 -1 进行比较详情参照 CMP 指令。CMP : 比较(Compare)
CMP{条件}{P} , status = op_1 - op_2CMP 允许把一个寄存器的内容如另一 个寄存器的内容或立即值进行比较,更改状态标志来允许进行条件执行。它进 行一次减法,但不存储结果,而是正确的更改标志。标志表示的是操作数
1
比操作数 2 如何(大小等)。如果操作数 1 大于操作操作数 2,则此后的有 GT 后缀的指令将可以执行。明显的,你不需要显式的指定 S 后缀来更改状态 标志... 如果你指定了它则被忽略。TEQ : 测试等价(TestEquivalence)
TEQ{条件}{P} , Status = op_1 EOR op_2TEQ 类似于 TST。区别是这里的概 念上的计算是 EOR 而不是 AND。这提供了一种查看两个操作数是否相同而 又不影响进位标志(不象 CMP 那样)的方法。加上 P 后缀的 TEQ 还可用于改变 R15 中的标志(在 26-bit 模式中)。详情请参照 psr.html,在 32-bit 模式下如何 做请参见这里。TST : 测试位(Testbits)
TST{条件}{P} , Status = op_1 AND op_2TST 类似于 CMP,不产生放置到目 的寄存器中的结果。而是在给出的两个操作数上进行操作并把结果反映到状态 标志上。使用 TST 来检查是否设置了特定的位。操作数 1 是要测试的数据字 而操作数 2 是一个位掩码。经过测试后,如果匹配则设置 Zero 标志,否则清
除它。象 CMP 那样,你不需要指定 S 后缀。TST R0, #%1 ;
测试在 R0 中是否设置了位 0。tips:感谢大家的阅读,本文由我司收集整编。 仅供参阅!