ARM微处理器的指令集

来源:互联网 发布:网络男歌手排行榜 编辑:程序博客网 时间:2024/04/26 17:27

。跳转指令

。数据处理指令

。程序状态寄存器(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 的内容到通用寄存器指令

MUL 32位乘法指令

MVF 传送值到浮点数寄存器

MVN 数据取反传送指令

ORR 逻辑或指令

RSB 逆向减法指令

RSC 带借位的逆向减法指令

SBC 带借位减法指令

STC 协处理器寄存器写入存储器指令

STM 批量内存字写入指令

STR 寄存器到寄存器的数据传输指令

 

SUB 减法指令

SWI 软件中断指令

TEQ 相等测试指令

TST 位测试指令

 

 

ARM 指令的立即数寻址是一种特殊的寻址方式,操作数本身就在指令中给出,只要取

出指令也就取到了操作数。这个操作数被称为立即数。

 

 

ADD r0,ro,#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 r0,[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 的内容加上0x0A形成操作数的有效地址,从而取得操作

数存入寄存器R0 中,然后,R1 的内容自增0x0A个字节。

 

 

 

5.多寄存器寻址

  采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用

一条指令完成传送最多16 个通用寄存器的值

 

 

LDMIA R0,{R1,R2,R3,R4} ;R1←[R0]

;R2←[R0 + 4]

 

 

;R3←[R0 + 8]

;R4←[R0 + 12]

 

 

 

 

 

 

该指令的后缀IA表示在每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可

将连续存储单元的值传送到R1~R4。

 

 

6.相对寻址

 

与基址变址寻址方式相类似,相对寻址以程序计数器PC 的当前值为基地址,指令中的

地址标号作为偏移量,将两者相加之后得到操作数的有效地址。比如下面的程序段完成子程

序的调用和返回,跳转指令BL采用了相对寻址方式。

 

 

7.堆栈寻址

  堆栈是一种数据结构,按FILO 的工作方式,使用一个称堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。

根据堆栈生成方式,堆栈又可以分为递增堆栈(Ascending stack)和递减堆栈(decending stack),当堆栈由低地址想告地状生成是,称为递增堆栈;

 

(1)满递增堆栈:堆栈指针指向最后压入的数据,并且堆栈以递增方式向上生成。

(2)满递减堆栈:堆栈指针指向最后压入的数据,并且堆栈以递减方式向下生成。

(3)空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址

生成。

(4)空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址

生成。