Chinaunix首页 | 论坛 | 博客
  • 博客访问: 844322
  • 博文数量: 489
  • 博客积分: 475
  • 博客等级: 下士
  • 技术积分: 3087
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 16:28
文章分类

全部博文(489)

文章存档

2013年(7)

2012年(301)

2011年(181)

分类:

2011-12-22 21:46:20

  1. ;数据传送指令 移位操作
  2. AREA Code, CODE, READONLY ;声明代码段
  3. ENTRY ;标识程序入口
  4. START
  5. MOV R0, #55 ;将立即数5传送到寄存器R0
  6. MOV R1, R0 ;将寄存器R0的值传送到寄存器R1
  7. MOV R2, R1, LSL #3 ;将寄存器R1的值左移3位后传送到R2
  8. MOV R3, R1, ROR #32-3 ;将寄存器R1的值循环右移32-3位后传送到R2
  9. ;程序出口
  10. STOP
  11. MOV R0, #0x18
  12. LDR R1, =0x20026
  13. SWI 0x123456
  14. END ;标识源代码结束
  15. ;以下内容全部忽略
  1. ;加法指令
  2. AREA Code, CODE, READONLY ;声明代码段
  3. ENTRY ;标识程序入口
  4. START
  5. ADD R0, R1, R2 ;R0 = R1 + R2
  6. ADD R0, R1, #5 ;R0 = R1 + 5
  7. ADD R0, R1, R2, LSL #2 ; R0 = R1 + (R2左移2位)
  8. ;程序出口
  9. STOP
  10. MOV R0, #0x18
  11. LDR R1, =0x20026
  12. SWI 0x123456
  13. END ;标识源代码结束
  14. ;以下内容全部忽略
  1. ;数据传送指令 MOV MVN
  2. AREA Code, CODE, READONLY ;声明代码段
  3. ENTRY ;标识程序入口
  4. START
  5. MOV R0, #5 ;将立即数5传送到寄存器R0
  6. MOV R1, R0 ;将寄存器R0的值传送到寄存器R1
  7. MOV R2, R1, LSL #3 ;将寄存器R1的值左移3位后传送到R2
  8. MVN R1, R2 ;将R2取反,结果存到R1中
  9. ;程序出口
  10. STOP
  11. MOV R0, #0x18
  12. LDR R1, =0x20026
  13. SWI 0x123456
  14. END ;标识源代码结束
  15. ;以下内容全部忽略

数字常量表达式

         数字常量表达式可以简单到一个立即数,还可以使用单目操作符、双目操作符、逻辑操作符和算术操作符等。

            # 0x88                        ;立即数

            # 0x40+0x20              ;使用加法

            # 0x40+0x20*4          ;使用加减乘除算术运算

            # 0x80:ROR:02         ;使用移位操作,循环右移2

            # 2_11010010            ;使用二进制

            # 0xFF:MOD:08       ;取模操作

            # 0xFF0000:AND:660000       ;逻辑操作,两数相与

 ADDS  R0, R2, R4    ;32位加,S影响标志位

 ADC R1, R3, R5       ;32位带进位加

SUB指令示例:

  SUB  R0R1R2        ;R0 = R1 - R2

  SUB  R0R1#6         ;R0 = R1 - 6

  SUB  R0R2R3LSL#1    ;R0 = R2 - (R3 左移一位)

RSB指令示例:

   RSB  R0R1R2               ; R0 = R2-R1

   RSB  R0R1#6                ; R0 =6-R1

   RSB  R0R2R3LSL #1    ; R0 = (R3左移一位)-R2

CMP指令示例:

     CMP R1,#10             ;将寄存器R1的值与10相减, ;并设置CPSR的标志位

     ADDGT R0R0#5   ;如果R1>10,则执行 ;ADDGT指令,

R05 LDR指令示例:

 LDR R4,START                              ;将存储地址为START的字数据读入R4   

 STR R5,DATA1                               ;将R5存入存储地址为DATA1中;前索引

 LDR R0[R1]                                 ;将存储器地址为R1的字数据读入寄存器R0

 LDR R0[R1R2]                        ;将存储器地址为R1+R2的字数据读入寄存器R0

 LDR R0[R1,#8]                       ;将存储器地址为R1+8的字数据读入寄存器R0

 LDR R0[R1R2LSL2]      ;将存储器地址为R1R2×4的字数据读入寄存器R0。;自动索引

 STR R0[R1R2]!                     ;将R0字数据存入存储器地址为R1+R2的存储单元中,   ;并将新地址R1R2写入R1

 STR R0[R1,#8]!                    ;将R0字数据存入存储器地址为R1+8的存储单元中, ;并将新地址R18写入R1

 STR R0[R1R2LSL2]!   ;将R0字数据存入地址为R1R2×4的存储单元中, ;并将新地址R1R2×4写入R1。;后索引

LDR R0[R1],#8      ;将存储器地址为R1的字数据读入寄存器R0,  ;并将新地址R18写入R1

  LDR R0[R1]R2       ;将存储器地址为R1的字数据读入寄存器R0,;并将新地址R1R2写入R1

  LDR R0[R1]R2LSL2      ;将存储器地址为R1的字数据读入   ;寄存器R0 ,并将新地址  ;R1R2×4写入R1

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