ARM指令-条件执行及标志位

1.ARM指令条件码前缀的作用:
        ARM指令可以通过添加适当的条件码前缀来达到条件执行的目的。
        这样可以提高代码密度,减少分支跳转指令数目,提高性能;
比如:
    CMP  r3,#0            ---比较r3和0
    BEQ  skip                ---相等就跳到skip
    ADD  r0,r1,r2        ---不相等就执行 r0 = r1 + r2
skip
……
看看加后缀简化后的样子:
    CMP  r3,#0            ---比较r3和0
    ADD NE   r0,r1,r2    ---加了NE后缀,不相等就执行r0 = r1 + r2
    

2.默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。
    CMP不需要增加“S”就可以改变相应的标志位。
     1)、什么是标志位?
                即条件码标志位,就是程序执行的条件,每执行完一个指令条件标志位就会改变;
                是前面“ARM寄存器详解“里面讲到的CPSR:
CPSR程序状态寄存器剖析
 1.高4位:NZCV
                N 置1:结果是负数;
                Z  置1:结果是0;
                C  置1:结果完成或借位
                V  置1:结果溢出
     2)、加S怎样影响标志位?
        如:SUB S  r3,r3,#0            ---r3 = r3 - 0
                BEQ      skip                ---如果相等就跳转
            注:这个S的意义是:执行SUB后如果不相等的话,CPSR的Z清0(置1),按照这个条
                件再继续执行下面的。而CMP是默认可以改变标志位的,就不需要加S。

3.处理器如何知道根据指令来更改对应的条件标志位呢?
        这里说的单指数据处理指令,其他指令的话不需要运算就不需要改变CPSR的标志位;
        数据处理指令的机器码格式:
        ARM指令-条件执行及标志位_第1张图片
  这些是一一对应的:条件码对应指令后缀(写指令的时候需要写出来的)对应标志位;
ARM指令-条件执行及标志位_第2张图片

你可能感兴趣的:(ARM指令-条件执行及标志位)