码迷,mamicode.com
首页 > 其他好文 > 详细

ARM指令集

时间:2014-12-03 21:13:32      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:style   ar   sp   strong   on   数据   div   bs   ad   

ARM处理器指令集主要有 6大类:

  • 跳转指令
  • 数据处理指令
  • 程序状态寄存器 (PSR) 处理指令
  • 加载/存储指令
  • 协处理器指令
  • 异常产生指令
指令 指令功能
ADC 带进位加法
ADD 加法
AND 逻辑与
B 跳转
BIC 位清零
BL 带返回的跳转
BLX 带返回和状态切换的跳转
BX 带状态切换的跳转
CDP 协处理器数据操作
CMN 比较反值
CMP 比较
EOR 异或
LDC 存储器到协处理器的数据传输
LDM 加载多个寄存器
LDR 存储器到寄存器的数据传输
MCR 从 ARM 寄存器到协处理器寄存器的数据传输
MLA 乘加运算
MOV 数据传送
MRC 从协处理器寄存器到ARM寄存器的数据传输
MRS 传送 CPSR 或 SPSR 的内容到通用寄存器
MSR 传送通用寄存器到 CPSR 或 SPSR 的
MUL 32位乘法
MVF 传送值到浮点数寄存器
MVN 数据取反传送
ORR 逻辑或
RSB 逆向减法
RSC 带借位的逆向减法
SBC 带借位减法
STC 协处理器寄存器写入存储
STM 批量内存字写入
STR 寄存器到存储器的数据传输
SUB 减法
SWI 软件中断
TEQ 相等测试
TST 位测试
   

 

ARM 指令寻址方式
 
 
 
1、立即数寻址
操作数就在指令中给出,只要取出指令也就取到了操作数,这个操作数被成为立即数。
ADD R0, R0, #1 ; R0 <- R0 + 1
ADD R0, R0, #0x3A ; R0 <- R0 + 0x3A

上面指令中,第 2 个源操作数为立即数。

2、寄存器寻址
寄存器寻址,即利用寄存器中的数值作为操作数。
ADD R0, R1, R2 ; R0 <- R1 + R2

该指令将寄存器 R1 和 R2 的内容想家,结果存在 R0 中。

3、寄存器间接寻址
寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。
ADD R0, R1, [R2] ; R0 <- R1 + [R2]
LDR R1, [R1] ; R0 <- [R1]
第 1 条指令,以寄存器 R2 的内容作为操作数的地址,然后与 R1 相加,其结果存入寄存器 R0 中。
第 2 条指令,以 R1 的值为地址的寄存器中的内容送到 R0 中。

4、基址变址寻址
基址变址的寻址方式就是将寄存器 ( 该寄存器一般称作基址寄存器 )的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。

LDR R0, [R1, #0x0A] ; R0 <- [R1 + 0x0A]
LDR R0, [R1, #0x0A]! ; R0 <- [R1 + 0x0A] , R1 <- R1 + 0x0A

第 1 条指令,将寄存器 R1 的内容加上 0x3A 形成操作数有效地址,然后将该地址处的操作数送往 R0 中。
第 2 条指令,将寄存器 R1 的内容加上 0x3A 形成操作数有效地址,然后将该地址处的操作数送往 R0 中,最后 R1 + 0x0A 的值还存往 R1中,R1得到更新。

5、多寄存器寻址
多寄存器寻址,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令玩成传送最多 16 个通用寄存器的值。

LDMIA R0, {R1, R2, R3,R4} ; R1 <- [R0]
; R2 <- [R0 + 4]
; R3 <- [R0 + 8]
; R4 <- [R0 + 12]

该指令的后缀 IA 是“ Increment After ” 之意,表示每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到 R1~R4 。

6、相对寻址
与基址寻址方式相似,相对寻址以程序计数器 PC 的当前值为基地址,指令中的地址标号作为偏移量,将两者相加后得到的操作数作为有效地址。
BL NEXT ; 跳转到子程序 NEXT 处执行
... ...
NEXT
... ...
MOV PC, LR ; 从子程序返回


7、堆栈寻址
根据堆栈的生成方式,堆栈分为递增堆栈 (Ascending Stack),和递减堆栈 (Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有 4 种堆栈工作方式:
(1) 满递增堆栈:堆栈指针指向最后压入的数据,并且堆栈以递增方式向上生成。
(2) 满递减堆栈:堆栈指针指向最后压入的数据,并且堆栈以递减方式向下生成。
(2) 空递增堆栈: 堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。
(3) 空递减堆栈: 堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。

ARM指令集

标签:style   ar   sp   strong   on   数据   div   bs   ad   

原文地址:http://www.cnblogs.com/be-m/p/4141109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!