您的位置 首页 开关

ARM9学习笔记之——汇编

ARM系列芯片与PC系列(可能我说法不太准确)芯片在指令设计上就有本质的区别。ARM中每条指令是精简指令集要么是32位,要么是16位。…

ARM系列芯片与PC系列(或许我说法不太精确)芯片在指令规划上就有实质的差异。ARM中每条指令是精简指令集要么是32位,要么是16位。而PC的指令是杂乱指令集,一条指令能够由多个字节组成。

在写ARM汇编程序时,发现ARM的指令十分的灵敏,相同一个功用能够运用多种办法完成。给开发者更多DIY的当地。以下是一些小总结,如有不正确的当地欢迎纠正。

1. 关于函数调用办法

在ARM汇编中,函数调用十分灵敏。

(1)BL指令

  1. blinitmem;调用
  2. mem
  3. ….
  4. movpc,lr;回来

BL指令在编译时,是以当时指令地址为基准相对跳转。我们指令中地址区域为16位,其间1位作前后标志,剩余15位作为跳转规模。所以跳转地址规模为当时地址前后32MB地址。

(2)LDR PC, = xmain

  1. ldrlr,=endmain;保存肯定回来地址
  2. ldrpc,=xmain;肯定地址跳转
  3. endmain
  4. bendmain

当编译器在对LDR宏进行编译时,xmain作为肯定地址赋给PC。

(3)BX

  1. ldrr0,=xmain
  2. bxr0

也是肯定地址跳转。在跳转中,能够进行ARM与thumb指令集转化。

2.关于LDR与ADR宏

在做“2.6.8内存驱动试验”时,我重视了initmemloop前一个指令”adr r2, memdata”。尝试着将它换成 ldr 进行试验。

通过反汇编与寄存器盯梢,我看到它们的差异:

  1. ldrr2,=memdata;r2=运转地址
  2. adrr2,memdata;r2=加载地址
  3. ldrr2,memdata;r2=0x22000000
  4. adrr2,=memdata;编译过错

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/264112.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部