Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48764
  • 博文数量: 25
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-13 05:50
文章分类

全部博文(25)

文章存档

2011年(5)

2010年(1)

2009年(19)

我的朋友

分类: LINUX

2009-04-13 09:21:39

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

阅读(852) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~