ARM指令集⽐较指令
译注:CMP 和 CMP 是算术指令,TEQ 和 TST 是逻辑指令。把它们归⼊⼀类的原因是它们的 S 位总是设置的,就是说,它们总是影响标志位。
CMN : ⽐较取负的值
(Compare Negative)
CMN{条件}{P}  ,
status = op_1 - (- op_2)
CMN同于CMP,但它允许你与⼩负值(操作数 2 的取负的值)进⾏⽐较,⽐如难于⽤其他⽅法实现的⽤于结束列表的 -1。这样与 -1 ⽐较将使⽤:
CMN    R0, #1                  ; 把 R0 与 -1 进⾏⽐较
详情参照CMP指令。
CMP : ⽐较
比较指令cmp怎么用(Compare)
CMP{条件}{P}  ,
status = op_1 - op_2
CMP允许把⼀个寄存器的内容如另⼀个寄存器的内容或⽴即值进⾏⽐较,更改状态标志来允许进⾏条件执⾏。它进⾏⼀次减法,但不存储结果,⽽是正确的更改标志。标志表⽰的是操作数 1 ⽐操作数 2 如何(⼤⼩等)。如果操作数 1 ⼤于操作操作数 2,则此后的有 GT 后缀的指令将可以执⾏。
明显的,你不需要显式的指定S后缀来更改状态标志... 如果你指定了它则被忽略。
TEQ : 测试等价
(Test Equivalence)
TEQ{条件}{P}  ,
Status = op_1 EOR op_2
TEQ类似于TST。区别是这⾥的概念上的计算是 EOR ⽽不是 AND。这提供了⼀种查看两个操作数是
否相同⽽⼜不影响进位标志(不象CMP 那样)的⽅法。加上P后缀的TEQ还可⽤于改变 R15 中的标志(在 26-bit 模式中)。详情请参照 psr.html,在 32-bit 模式下如何做请参见这⾥。
TST : 测试位
(Test bits)
TST{条件}{P}  ,
Status = op_1 AND op_2
TST类似于CMP,不产⽣放置到⽬的寄存器中的结果。⽽是在给出的两个操作数上进⾏操作并把结果反映到状态标志上。使⽤TST来检查是否设置了特定的位。操作数 1 是要测试的数据字⽽操作数 2 是⼀个位掩码。经过测试后,如果匹配则设置 Zero 标志,否则清除它。象CMP那样,你不需要指定S后缀。
TST    R0, #%1                ; 测试在 R0 中是否设置了位 0。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。