【发布时间】:2019-01-10 15:13:20
【问题描述】:
我无法理解 ARM 中这两条指令之间的区别。据我了解,
CMP R1, R2
将执行操作 R1-R2,但不存储结果。然后它会在状态寄存器中设置标志,例如 N(负数,如果 R1
我不明白 TST 的不同之处。在我的笔记中,它说 TST 不会改变其操作数的值。但我认为 CMP 也没有。这两个指令有何不同?
怎么样
CMP R1, R2
不同于
TST R1, R2
?提前感谢您的帮助!
【问题讨论】:
我无法理解 ARM 中这两条指令之间的区别。据我了解,
CMP R1, R2
将执行操作 R1-R2,但不存储结果。然后它会在状态寄存器中设置标志,例如 N(负数,如果 R1
我不明白 TST 的不同之处。在我的笔记中,它说 TST 不会改变其操作数的值。但我认为 CMP 也没有。这两个指令有何不同?
怎么样
CMP R1, R2
不同于
TST R1, R2
?提前感谢您的帮助!
【问题讨论】:
TST R1, R2 计算R1 和R2 的按位与,然后丢弃结果,而CMP R1, R2 将两者相减。 TST 主要在 ARM 上用于找出给定位是否在数字中设置。例如,要检查 R1 是否为奇数,您可以这样做:
TST R1, #1 @ is R1 odd?
如果R1 是奇数,这会将 Z 标志设置为 0。
【讨论】:
AND 相同的计算,即第一个参数中的每个位与第二个参数中的相应位进行“与”运算。立即数转换为 32 位整数,就像所有其他指令一样。 #1 与 #0x00000001 相同,如果这对您有帮助的话。