Assembly 什么';ARM中CMP和TST指令的区别是什么?

Assembly 什么';ARM中CMP和TST指令的区别是什么?,assembly,arm,Assembly,Arm,我很难理解ARM中这两个指令之间的区别。据我了解, CMP R1, R2 将执行操作R1-R2,但不存储结果。然后,它将在状态寄存器中设置标志,例如N(如果为R1,则为负) 我不明白TST的不同之处。在我的笔记中,它说TST不会改变其操作数的值。但我认为CMP也不会。这两条指令有何不同 怎么样 CMP R1, R2 不同于 TST R1, R2 ?提前感谢您的帮助!TST R1、R2计算R1和R2的按位AND,然后丢弃结果,而CMP R1、R2将两者相减。TST在ARM上主要用于确定给定位

我很难理解ARM中这两个指令之间的区别。据我了解,

CMP R1, R2
将执行操作R1-R2,但不存储结果。然后,它将在状态寄存器中设置标志,例如N(如果为R1,则为负) 我不明白TST的不同之处。在我的笔记中,它说TST不会改变其操作数的值。但我认为CMP也不会。这两条指令有何不同

怎么样

CMP R1, R2
不同于

TST R1, R2

?提前感谢您的帮助!

TST R1、R2计算
R1
R2
的按位AND,然后丢弃结果,而
CMP R1、R2
将两者相减。
TST
在ARM上主要用于确定给定位是否设置在数字中。例如,检查
R1
是否为odd、 你可以这样做:

TST R1, #1    @ is R1 odd?

这会将Z标志设置为0,如果
R1
,这很奇怪。

这很有意义,谢谢。TST如何计算按位AND并使用其结果?例如,如果R1保持为#100,TST R1、#1会做什么?它会只执行并在R1的最低有效位上使用#1忽略其余部分吗?@user43712它会执行相同的计算as
,即第一个参数中的每一位都与第二个参数中的对应位进行AND运算。与其他所有指令一样,立即数被转换为32位整数。
#1
#0x00000001
相同,如果这对您有帮助的话。基于AND的比较既不是arm独有的,也不仅仅对arm有用e“手臂上”你陈述的一部分没有意义…啊,谢谢,是的,这澄清了问题。最后一个相关问题-如果我们得到的是一个与TST结果中最长操作数长度相同的数字,那么如何设置标志?你在奇数测试中提到,如果R1的最低有效位等于1,则设置Z标志。如何设置标志?我会尽我最大的努力去理解任何人的答案。从多个人那里听到解释对我和未来有同样问题的读者来说都是非常有用的。我鼓励任何人用答案来回答,即使答案有点超出我的理解范围。再次感谢你的帮助大家:)