ARM在EOR / XOR和AND上携带标志

时间:2009-07-29 10:48:21

标签: assembly arm

我正在查找一些ARM程序集,我注意到EOR / XOR和AND都设置了C和O标志。这是如何运作的?他们总是被清除吗?他们设定了什么条件?

4 个答案:

答案 0 :(得分:4)

我不相信正常的AND / EOR设置了进位和溢出标志。 ANDS和EORS变体(AND / EOR with set)可以设置进位,但前提是右侧是移位的操作数。这些都不会影响溢出标志。

例如,

ANDS R0,R1,R2, LSR #1

将根据R2的b0设置进位。如果该位为1(即,R2为奇数),则将设置进位。

有关详细信息,请参阅here(第3章,指令集)。

答案 1 :(得分:4)

如果您决定继续使用ARM汇编程序,则需要ARM ARM的副本,即ARM体系结构参考手册。有许多版本,每个版本都有自己的“功能”。我建议尽可能多地收集,但这是另一个故事。有许多方法可以免费获得电子版。无论哪种方式:

和 你需要S位设置,对于ARM来说意味着使用ANDS代替AND。对于拇指模式,你总是使用ANDS,但气体例如拒绝在拇指模式下接受ANDS(但总是将其拆分为ands)。

If S==1 and Rd == R15 then 
  CPSR=SPSR
else if S==1
  N Flag = Rd[31]
  Z Flag = if Rd == 0 then 1 else 0
  C Flag = shifter_carry_out
  V flag = unaffected

当涉及到标志时,EOR与AND相同

答案 2 :(得分:3)

正如其他海报所述,C标志会根据一个移位进行更新,该移位可选择应用于操作之前的之一。

V(溢出)标志不受这些指令的影响。

如果结果正好为零,则设置Z标志;如果结果为负二进制补码整数(即高阶位为1),则设置N标志。

答案 3 :(得分:2)

回想一下,您可以在操作后随意移动结果。进位标志基于从桶形移位器的执行来设置。溢出标志永远不会受到影响。