Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32425
  • 博文数量: 4
  • 博客积分: 86
  • 博客等级: 民兵
  • 技术积分: 76
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 20:44
文章分类

全部博文(4)

文章存档

2013年(1)

2012年(3)

分类: 服务器与存储

2012-10-14 22:18:17

1.ARM指令条件码前缀的作用:
        ARM指令可以通过添加适当的条件码前缀来达到条件执行的目的。
        这样可以提高代码密度,减少分支跳转指令数目,提高性能;
比如:
    CMP  r3,#0            ---比较r3和0
    BEQ  skip                ---相等就跳到skip
    ADD  r0,r1,r2        ---不相等就执行 r0 = r1 + r2
skip
……
看看加后缀简化后的样子:
    CMP  r3,#0            ---比较r3和0
    ADDNE   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怎样影响标志位?
        如:SUBS  r3,r3,#0            ---r3 = r3 - 0
                BEQ      skip                ---如果相等就跳转
            注:这个S的意义是:执行SUB后如果不相等的话,CPSR的Z清0(置1),按照这个条
                件再继续执行下面的。而CMP是默认可以改变标志位的,就不需要加S。

3.处理器如何知道根据指令来更改对应的条件标志位呢?
        这里说的单指数据处理指令,其他指令的话不需要运算就不需要改变CPSR的标志位;
        数据处理指令的机器码格式:
       
  这些是一一对应的:条件码对应指令后缀(写指令的时候需要写出来的)对应标志位;
阅读(8806) | 评论(0) | 转发(1) |
1

上一篇:没有了

下一篇:ARM处理器的八种寻址方式介绍

给主人留下些什么吧!~~