Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1467252
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类:

2009-06-07 13:55:08

  在ARM中有两种方式可以实现程序的跳转,一种是使用分支指令直接跳转,另一种则是直接向PC寄存器赋值实现跳转。 分支指令有以下三种:
    分支指令B;
    带链接的分支指令BL;
    带状态切换的分支指令BX。
    分支指令——B指令,该指令跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。指令格式如下:B{cond}    Label
       应用示例:
       B   WAITA ; 跳转到WAITA标号处
       …
       WAITA  …
       带链接的分支指令——BL指令适用于子程序调用,使用该指令后,下一条指令的地址被拷贝到R14(即LR) 连接寄存器中,然后跳转到指定地址运行程序。跳转范围限制在当前指令的±32M字节地址内。指令格式如下:
        BL{cond}    Label
        带状态切换的分支指令——BX指令,该指令可以根据跳转地址(Rm)的最低位来切换处理器状态。 ARM指令为字对齐,最低2位地址固定为0。指令格式如下:
        BX{cond}    Rm
例:
    ADRL   R0,ThumbFun+1  ;将Thumb程序的入口地址加1存入R0
    BX     R0      ; 跳转到R0指定的地址,
     ;并根据R0的最低位来切换处理器状态
阅读(3680) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~