【mini2440】ARM汇编指令2

一、数据交换指令

 

1) SWP: 字数据交换

i. SWP{条件}       目的寄存器, 源寄存器1, [源寄存器2] ;1 == 2交换

SWP                     R0, R1, [R2] ; R0 [R2], R1 [R2]

SWP                     R0, R0, [R1] ; R0 [R1]

 

2) SWPB: 字节数据交换

 

二、移位指令

ARM指令集中不作为单独的指令使用, 它只能作为指令格式中的一个字段, (ASL == LSL)

 

1)  LSL 逻辑左移 (Logic shift left)

2)  ASL 算术左移 (Arithmetic shift left)

3)  LSR 逻辑右移

4)  ASR 算术右移

5)  ROR 循环右移 (Rotate right)

MOV     R0, R1, LSL#2      ; R1的内容左移两位后存入R0

MOV     R0, R1, ROR#2    ; R1的内容循环右移两位后存入R0

 

三、异常产生指令

 

1) SWI : 软件中断指令

i. SWI{条件}           24位的立即数

SWI            0X02              ; 调用操作系统编号02的系统例程

 

2) BKPT : 断点中断指令

 

四、伪指令

 

用于定义ARM汇编中的变量, 对变量赋值, 定义寄存器的别名等操作

 

        A: Arithmetic  L: Logic  S: String

1)   定义全局变量: GBLA, GBLL, GBLS

i. GBLA: 定义一个全局的数字变量, 并初始化为0

ii. GBLL: 定义一个全局的逻辑变量, 并初始化为F()

iii. GBLS: 定义一个全局的字符串变量, 并初始化为FNLL()

 

2)   定义局部变量: LCLA, LCLL, LCLS

3)   对变量赋值: SETA, SETL, SETS

4)   为通用寄存器列表定义名称的RLIST

格式:  名称             RLIST           {寄存器列表}

示例:  RegList       RLIST           {R0-R5, R8, R10}  

; LDM/STM中可通过RegList访问寄存器列表

 

说明: RLIST(register list), 定义寄存器列表名, 用于LDM/STM. 在其指令中, 列表中的寄存器访问次序

   为根据寄存器的编号由低到高, 而与列表中的寄存器排列次序无关.

 

5)   Example:

i. GBLA           TEST1           ; 定义一个全局的数据变量, 变量名为TEST1

ii. TEST1        SETA 0XAA   ; 将该变量赋值为0xaa

 

iii. GBLL         TEST2

iv. TEST2        SETL {TRUE}

 

v. GBLS           TEST3

vi. TEST3        SETS “TESTING”

 

五、数据定义伪指令

数据定义伪指令一般用于特定的数据分配存储单元, 同时可完成已分配存储单元的初始化. 常见的数据定义伪指令如下:

DCB   DCW  DCD  DCFD   DCFS

DCD   SPACE  MAP  FILED

 

1)   DCB

1. 格式: 标号   DCB           表达式

2. 说明: DCB伪指令用于分配一片连续的字节存储单元并用伪指令中指定的表达式初始化. 其中, 表达式可以为0~255的数字或字符串. DCB可以用”=”代替.

3. 示例:

Str              DCB           “Test String !”  

; 分配一片连续的字节存储单元并初始化

 

2)   SPACE

1. 格式: 标号                      SPACE        表达式

2. 说明: SPACE伪指令用于分配一片连续的存储区域并初始化为0. 其中, 表达式为要分配的字节数. SPACE也可以用”%”代替.

3. 示例:

DataSpace          SPACE       100

; 分配连续100个字节的存储单元并初始化为0

 

3)   MAP

1. 格式: MAP         表达式{, 基址寄存器}

2. 说明: MAP用于定义一个结构化的内存表的首地址. MAP也可以用”^”代替. 表达式为程序中的标号或者数学表达式. 当基址寄存器选项不存在时, 表达式的值即为内存表的首地址. Map指令常与FIELD伪指令配合使用来定义结构化内存表.

3. 示例:

MAP          TEST                      ;TEST就是内存表的首地址

MAP           0x100,R0               ;内存表的首地址为 R0+0x100

 

4) FILED

1. 格式: 标号 FIELD 表达式

2. 说明: FIELD伪指令用于定义一个结构化内存表中的数据域. FIELD也可以用”#”代替. 表达式的值为当前数据域在内存表中所占的字节数. FIELD伪指令常与map伪指令配合来定义结构化内存表. 为每一个数据域指定一个标号.

3. 示例:

MAP          0X10                      ; 定义结构化内存表首地址为0x100

A                FIELD 16              ; 定义A的长度为16字节, 位置: 0x100

B                FIELD 32              ; 定义B的长度为32字节, 位置: 0x110

S                FIELD 256            ; 定义S的长度为256字节, 位置: 0x130

 

 

a) 汇编控制伪指令

 

汇编空值伪指令用于控制汇编程序的执行流程, 常用的汇编控制伪指令如下:

IF    ELSE   ENDIF

WHILE       WEND

MACRO      MEND

MEXIT

 

1) IF

IF       *逻辑表达式

*指令1

ELSE

*指令2

ENDIF

 

2) WHILE

WHILE    *逻辑表达式

*指令序列

WEND

3)  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值