我正在查找一些ARM程序集,我注意到EOR / XOR和AND都设置了C和O标志。这是如何运作的?他们总是被清除吗?他们设定了什么条件?
答案 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)
回想一下,您可以在操作后随意移动结果。进位标志基于从桶形移位器的执行来设置。溢出标志永远不会受到影响。