ARM 中的 CMP 和 TST 指令有什么区别?

use*_*712 2 assembly arm

我无法理解 ARM 中这两条指令之间的区别。据我了解,

CMP R1, R2
Run Code Online (Sandbox Code Playgroud)

将执行操作 R1-R2,但不存储结果。然后它会在状态寄存器中设置标志,例如 N(负,如果 R1

我不明白的是 TST 的做法有所不同。在我的笔记中,它说 TST 不会改变其操作数的值......但我认为 CMP 也没有。这两个指令有何不同?

怎么

CMP R1, R2
Run Code Online (Sandbox Code Playgroud)

不同于

TST R1, R2
Run Code Online (Sandbox Code Playgroud)

? 在此先感谢您的帮助!

fuz*_*fuz 5

TST R1, R2计算的位与R1R2,然后丢弃的结果,而CMP R1, R2减去两个。 TST主要在 ARM 上用于确定给定位是否设置在数字中。例如,要检查是否R1为奇数,您可以执行以下操作:

TST R1, #1    @ is R1 odd?
Run Code Online (Sandbox Code Playgroud)

如果R1是奇数,则将 Z 标志设置为 0 。

  • 我会尽我所能去理解任何人的答案。从多人那里听到它的解释可能对我和未来有相同问题的读者非常有用。我鼓励任何人回答,即使它有点超出我的理解范围。再次感谢大家的帮助:) (2认同)