免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 895 | 回复: 0
打印 上一主题 下一主题

常用的 ARM 汇编子程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-13 09:21 |只看该作者 |倒序浏览

1. 子程序 的调用
     BL xxxx
.....
xxxx
    .....
     MOV PC , LR
    或B LR
      BX LR
      STMFD SP!, {R0-R7 ,PC}

2. 数据比较 跳转
CMP R1,R2
BEQ XXXXXX
......
CMP R1,R2
ADDHI R1,R2,R1
ADDLS R1,R2,R2
......
ANDS R1,R1, #0x08
BNE WAIT

3. 循环
       MOV R1,#10
LOOP
      .....
      SUB R1,R1,#1
      CMP R1, 0
      BEQ LOOP

4. 数据块的复制
     MOV R1,=DATA_DST
     MOV R2,=DATA_SRC
     MOV R3,#10
LOOP
     LDMFD R2!,{R4-R8}
     STMFD R1!,{R4-R8}
     SUBS R3,R3,#1
     BNE LOOP

5. 堆栈操作
OUTDATA
     STMFD SP! {R0-R7,LR}
     ...
     BL DELAY
     ...
     LDMFD SP! {R0-R7,PC}

6. 特殊寄存器的使用
WDTC EQU 0x00320212
...
LDR R0, =WDTC
MOV R1, #1O
STR R1,[R0]  ; 实现对外设的访问

7. 散转功能
CMP RO , #MAXINDEX
ADDLO PC,PC,RO,#4 ; 如果没有超过范围,那么开始跳转
B ERROR           ;散转表所对应的标号 0,1,2,3 ....

B FUN1
B FUN2
...

8.查表功能
     LDR R1, =TABLE
     LDR R2, [R1 ,R5, LSL #2] ;R5 是要查询的表的标号
     ...
TABLE  DCD 0X11,OX22,OX33
       DCD 0X23,...

9.长跳转
    ADD LR, PC , #4
    LDR PC, [PC,#-4]
    DCD LADDR_FUN
    ....
    RET_FUN....
    也可以用 LDR PC, =LADDR_FUN 实现跳转

10.信号量
DISP_SEM EQU 0x40002A00
.....
DISP_WAIT
      MOV R1 ,#0
      LDR R0, =DISP_SEM
      SWP R1,R1,[R0]
      CMP R1,#0
      BEQ DISP_WAIT

11.伪指令的使用
LDR R1,=0x00120021
LDR R0,=RR_TAB
...
NOP
B ; 死循环

12. 外围部件的控制
LDR R0, =GPIO_BASE
MOV R1,#0x00
STR R1,[R0,#0x04] ; IOSET 0x00
MOV R1,#0x10
STR R1,[R0,#OxC0] ; IOCLR 0x101


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94518/showart_1898904.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP