• 沒有找到結果。

ARM 指令集

在文檔中 目 录 (頁 26-30)

tyw藏书

2.2 ARM 指令集

2.2.1 ARM 微处理器的指令集概述

ARM 微处理器的指令集主要有 6 大类。

• 跳转指令

• 数据处理指令

• 程序状态寄存器(PSR)处理指令

• 加载/存储指令

• 协处理器指令

• 异常产生指令

具体的指令及功能如表 2.2 所示(表中指令为基本 ARM 指令,不包括派生的 ARM 指令)。

表 2.2 ARM 指令及其功能描述

指 令 指令功能描述

ADC 带进位加法指令

ADD 加法指令

AND 逻辑与指令

B 跳转指令

BIC 位清零指令

BL 带返回的跳转指令

BLX 带返回和状态切换的跳转指令

BX 带状态切换的跳转指令

CDP 协处理器数据操作指令

CMN 比较反值指令

tyw藏书

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 软件中断指令

SWP 交换指令

TEQ 相等测试指令

TST 位测试指令

2.2.2 ARM 指令寻址方式

1.立即数寻址

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

tyw藏书

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

ADD R0,R0,#1 ;R0←R0 + 1 ADD R0,R0,#0x3A ;R0←R0 + 0x3A

在以上 2 条指令中,第 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]

tyw藏书

;R3←[R0 + 8]

;R4←[R0 + 12]

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

6.相对寻址

与基址变址寻址方式相类似,相对寻址以程序计数器 PC 的当前值为基地址,指令中的 地址标号作为偏移量,将两者相加之后得到操作数的有效地址。比如下面的程序段完成子程 序的调用和返回,跳转指令 BL 采用了相对寻址方式。

BL NEXT ;跳转到子程序 NEXT 处执行

……

NEXT ……

MOV PC,LR ;从子程序返回

7.堆栈寻址

堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称 作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。

根 据堆栈的 生成方 式,堆栈 又可以 分为递 增堆栈( Ascending Stack) 和 递减堆 栈

(Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低 地址生成时,称为递减堆栈。这样就有 4 种类型的堆栈工作方式,ARM 微处理器支持以下 4 种类型的堆栈工作方式。

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

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

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

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

2.2.3 Thumb 指令概述

作为 32 位的嵌入式处理器,ARM 具有 32 位数据总线宽度,但是为了更好地兼容数据 总线宽度为 16 位的应用系统,ARM 体系结构除了支持执行效率很高的 32 位 ARM 指令集以 外,同时支持 16 位的 Thumb 指令集。Thumb 指令集是 ARM 指令集的一个子集,允许指令 编码为 16 位的长度。与等价的 32 位代码相比较,Thumb 指令集在保留 32 代码优势的同时,

可以在很大程度上节省系统的存储空间。当处理器在执行 ARM 程序段时,称 ARM 处理器处 于 ARM 工作状态;当处理器在执行 Thumb 程序段时,称 ARM 处理器处于 Thumb 工作状态。

所有的 Thumb 指令都有对应的 ARM 指令,而且 Thumb 的编程模型也对应于 ARM 的编 程模型,在应用程序的编写过程中,只要遵循一定调用的规则,Thumb 子程序和 ARM 子程

tyw藏书

序就可以互相调用,二者结合应用可以充分发挥各自的特点,取得较好的效果。

在文檔中 目 录 (頁 26-30)