1 / 12
文档名称:

常用ARM指令.doc

格式:doc   大小:28KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

常用ARM指令.doc

上传人:q1188830 2022/6/22 文件大小:28 KB

下载得到文件列表

常用ARM指令.doc

相关文档

文档介绍

文档介绍:常用ARM指令
内存访问指令
基本指令:
LDR:memory -> register (memory包括映射到内存空间的非通用寄存器)
STR:register -> memory
语法:
op{cond }{B}{T} r2 ; r0 = r1 and r2
bics r0, r1, #0xff00 ; r0 = r1 and ! (0xff00)
ands r0, r1, #0xffff00ff ; 错误
MOV指令
语法:
MOV{cond}{S} Rd, Operand2
例子:
mov r0, #8 ; r0 = 8
mov r0, r1 ; r0 = r1
不同于LDR、STR指令,该指令可以寄存器间赋值
比较指令
基本指令:
CMP:比较两个操作数,并设置状态寄存器
语法:
CMP{cond } Rn, Operand2
例子:
cmp r0, r1 ; 计算r0 – r1,并设置状态寄存器,由状态寄存器可以知r0是否大于、小于或等于r1
cmp r0, #0 ;
跳转指令
基本指令:
B:跳转
BL:跳转并将下一指令的地址存入lr寄存器
语法:
op{cond} label
label:要跳向的地址
例子:
loop1
~ ~ ~
b loop1 ; 跳到地址loop1处
bl sub1 ; 将下一指令地址写入lr,并跳至sub1
~ ~ ~
sub1
~ ~ ~
mov pc, lr ; 从sub1中返回
【使用本地label(local label)】
本地label可以在一个程序段内多次使用,用数字作为label的名称,也可以在数字后面跟一些字母。引用本地label的语法是: %{F|B}{A|T}n{routname},其中F代表向前搜索本地label,B代表向后搜索,A/T不常使用。
例子
; 定义本地label,名称为“100”
~ ~ ~
100 ; 第二次定义本地label,名称为“100”
~ ~ ~
b %f100 ; 向前跳到最近的“100”处
~ ~ ~
b %b100 ; 向后跳至最近的“100”处
100 ; 第三次定义本地label 100
条件执行
条件:状态寄存器中某一或某几个比特的值代表条件,对应不同的条件后缀cond,如:
后缀 (cond) 状态寄存器中的标记 意义
EQ Z = 1 相等
NE Z = 0 不相等
GE N和V相同 >=
LT N和V不同 <
GT Z = 0, 且N和V相同 >
LE Z = 1, 或N和V不同 <=
例子:
cmp r0, r1 ;比较r0和r1
blgt sub1 ;如果r0>r1,跳转到sub1,否则不操作
;――――――――――――――――――――
;一段循环代码
ldr r2, =8 ;r2 = 8
loop
;这里可以进行一些循环内的操作
subs r2, r2, #1 ;r2 = r2 –1,并设置状态位
bne loop ;如果r2不等于0,则继续循环
;――――――――――――――――――――
mov r0, #1 ; r0 = 1
cmp r2, #8 ; 比较r2和8
movlt r0, #2 ; 如果r2<8,r0 = 2

ARM汇编程序结构
;――――――――――――――――――――
AREA EX2, CODE, READONLY
;AREA指令定义一个程序段,名称为EX2,属性为:CODE、READONLY
INCLUDE ;包含汇编头文件
IMPORT sub1 ;引用外部符号
EXPORT prog1 ;向外输出符号
ENTRY ;ENTRY指令定义程序的开始
start ;此处定义了一个label start
MOV r0, #10
MOV r1, #3
ADD r0, r0, r1 ;r0 =r0 +r1
prog1 ;此处