ARM汇编指令
2014-11-10 21:10
246 查看
ARM汇编指令
ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。
1.数据处理指令
1)数据传送指令
2) 算术逻辑运算指令
3)比较指令
==>数据处理指令,按照寻找方式分类(主要掌握三类)
1)立即数寻址
2)寄存器寻址
3)寄存器偏移寻址
2)寄存器寻址
3)寄存器偏移寻址
数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使用S后缀,并影响状态标志。比较指令CMP、CMN、TST和TEQ不需要后缀S,它们会直接影响状态标志。
常见指令集:
数据传送指令
例:
mov r1,r2 ;将寄存器 R0 的值传送到寄存器 R1
mov r0,#0x3 ; r0 = 0x3
mov r1,r0 ; r1 = r0
mov r1, r0 ,lsl #3 ;将寄存器 R0 的值左移 3 位后传送 到R1 。
MOVS R2,#0x10 ;R2= #0x10,并影响标志位。
MVNS R2,#0xFF ;R2=0Xffff00,并影响标志位。
MVN R0 ,#0;将立即数 0 取反传送到寄存器 R0 中,完成后R0=-1。
算术运算指令
ADD +
SUB -
======>最常见的两个算术运算
ADDR1,R2,R3 ; R1 = R2 +R3
SUB R1,R2,R3 ; R1 =R2 - R3
subs r3,r1,r2 ; r3 =r1-r2,并且影响cpsr标志位
逻辑运算
AND R0 ,R0 ,#3 ;该指令保持 R0 的 0 、1 位,其余位清零(重要)
1.取出第0位上的数据
MOV R0,#0x13
AND R0,#0x1
ORR R0 ,R0 ,#3 ;该指令设置 R0 的 0 、1 位,其余位保持不变
只要有一个为1 ==》1
置某位值;
1.将R0,的第0位置"1"
MOV R0,#0x12 (.......0001 0010)
ORR R0,#0x1
2.将R0,的低四位置"1"
MOV R0,#0x12 (.......0001 0010)
ORR R0,#0x0F
EOR R0 ,R0 ,#3 ;该指令反转 R0 的 0 、1 位,其余位保持不变
BIC R0,R0,#0x1F;该指令清除 R0 中低5位,其余的位保持不变
寄存器寻址方式:
操作数的值在寄存器中,指令中的地址码编号指出的是寄存器编号,指令执行时直接取出寄存器值来操作。
如:
mov
r1,r2 ;将r2的值存入r1
sub
r0,r1,r2 ;将r1的值减去r2的值,结果保存到r0
2.Load/Store访存指令
1)单寄存器操作指令
单寄存器加载指令
前后索引:
LDR r0,[r1,r2]
STR Rd, [Rbase, Rindex]! 存储 Rd 到 Rbase + Rindex 所合成的有效地址,
并且把这个新地址写回到 Rbase。
STR Rd, [Rbase, #index]! 存储 Rd 到 Rbase + index 所合成的有效地址,
并且并且把这个新地址写回到 Rbase。
多寄存器操作指令:
LDMIA R1!,{R2-R4,R6}
LDMIA R1!,{r4,r3,R6,r2}
;将R1指向的存储单元中的数据读出到
;R2、R3、R4、R6寄存器中()
;存储指针在加载第一个值之后增加
;增长方向为向上增长(! : 表示同时更新寄存器的值)
ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。
1.数据处理指令
1)数据传送指令
2) 算术逻辑运算指令
3)比较指令
==>数据处理指令,按照寻找方式分类(主要掌握三类)
1)立即数寻址
2)寄存器寻址
3)寄存器偏移寻址
2)寄存器寻址
3)寄存器偏移寻址
数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使用S后缀,并影响状态标志。比较指令CMP、CMN、TST和TEQ不需要后缀S,它们会直接影响状态标志。
常见指令集:
数据传送指令
例:
mov r1,r2 ;将寄存器 R0 的值传送到寄存器 R1
mov r0,#0x3 ; r0 = 0x3
mov r1,r0 ; r1 = r0
mov r1, r0 ,lsl #3 ;将寄存器 R0 的值左移 3 位后传送 到R1 。
MOVS R2,#0x10 ;R2= #0x10,并影响标志位。
MVNS R2,#0xFF ;R2=0Xffff00,并影响标志位。
MVN R0 ,#0;将立即数 0 取反传送到寄存器 R0 中,完成后R0=-1。
算术运算指令
ADD +
SUB -
======>最常见的两个算术运算
ADDR1,R2,R3 ; R1 = R2 +R3
SUB R1,R2,R3 ; R1 =R2 - R3
subs r3,r1,r2 ; r3 =r1-r2,并且影响cpsr标志位
逻辑运算
AND R0 ,R0 ,#3 ;该指令保持 R0 的 0 、1 位,其余位清零(重要)
1.取出第0位上的数据
MOV R0,#0x13
AND R0,#0x1
ORR R0 ,R0 ,#3 ;该指令设置 R0 的 0 、1 位,其余位保持不变
只要有一个为1 ==》1
置某位值;
1.将R0,的第0位置"1"
MOV R0,#0x12 (.......0001 0010)
ORR R0,#0x1
2.将R0,的低四位置"1"
MOV R0,#0x12 (.......0001 0010)
ORR R0,#0x0F
EOR R0 ,R0 ,#3 ;该指令反转 R0 的 0 、1 位,其余位保持不变
BIC R0,R0,#0x1F;该指令清除 R0 中低5位,其余的位保持不变
寄存器寻址方式:
操作数的值在寄存器中,指令中的地址码编号指出的是寄存器编号,指令执行时直接取出寄存器值来操作。
如:
mov
r1,r2 ;将r2的值存入r1
sub
r0,r1,r2 ;将r1的值减去r2的值,结果保存到r0
2.Load/Store访存指令
1)单寄存器操作指令
单寄存器加载指令
助记符 | 说明 | 操作 | 条件码位置 |
LDR Rd,addressing | 加载字数据 | Rd←[addressing],addressing索引 | LDR{cond} |
LDRB Rd,addressing | 加载无符号字节数据 | Rd←[addressing],addressing索引 | LDR{cond}B |
LDRT Rd,addressing | 以用户模式加载字数据 | Rd←[addressing],addressing索引 | LDR{cond}T |
LDRBT Rd, addressing | 以用户模式加载无符号字节数据 | Rd←[addressing],addressing索引 | LDR{cond}BT |
LDRH Rd, addressing | 加载无符号半字数据 | Rd←[addressing],addressing索引 | LDR{cond}H |
LDRSB Rd, addressing | 加载有符号字节数据 | Rd←[addressing],addressing索引 | LDR{cond}SB |
LDRSH Rd, addressing | 加载有符号半字数据 | Rd←[addressing],addressing索引 | LDR{cond}SH |
|
|
LDR r0,[r1,r2]
STR Rd, [Rbase, Rindex]! 存储 Rd 到 Rbase + Rindex 所合成的有效地址,
并且把这个新地址写回到 Rbase。
STR Rd, [Rbase, #index]! 存储 Rd 到 Rbase + index 所合成的有效地址,
并且并且把这个新地址写回到 Rbase。
多寄存器操作指令:
LDMIA R1!,{R2-R4,R6}
LDMIA R1!,{r4,r3,R6,r2}
;将R1指向的存储单元中的数据读出到
;R2、R3、R4、R6寄存器中()
;存储指针在加载第一个值之后增加
;增长方向为向上增长(! : 表示同时更新寄存器的值)
相关文章推荐
- arm汇编指令之数据块传输(LDM,STM)详解
- 【mini2440】ARM汇编指令2
- ARM汇编伪指令学习笔记
- arm学习之汇编跳转指令总结
- 08_ARM汇编自学笔记指令系统之跳转指令
- ARM汇编指令B和BL的区别
- 13_ARM汇编自学笔记指令系统之批量数据加载存储指令
- ARM:ARM汇编语言与基础汇编指令
- ARM汇编指令的特点和速查表
- ARM汇编指令3
- arm汇编指令
- 关于汇编ARM指令DCD
- ARM 汇编常用指令
- ARM汇编指令调试方法
- ARM 汇编伪指令宏的用法详解(MACRO-MEND)
- ARM汇编指令
- 【ARM汇编】SPACE和DCD指令的区别
- 09_ARM汇编自学笔记指令系统之数据处理指令
- 15_ARM汇编自学笔记指令系统之移位指令(操作)
- ARM汇编----伪指令LTORG