ARM 指令列表

本文详细介绍了ARM指令集的各种指令,包括算术运算、逻辑运算、数据处理、内存访问、跳转和子程序调用等。重点讲解了跳转指令,如B、BL、BLX和BX,以及它们在ARM体系结构中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM 指令列表

ADC

带进位的32位数加法

ADD

32位数相加

AND

32位数的逻辑与

B

在32M空间内的相对跳转指令

BEQ相等则跳转(Branch if EQual)
BNE不相等则跳转(Branch if Not Equal)
BGE大于或等于跳转(Branch if Greater than or Equa)
BGT大于跳转(Branch if Greater Than)

BIC

32位数的逻辑位清零

BKPT

断点指令

BL

带链接的相对跳转指令

BLE小于或等于跳转(Branch if Less than or Equal)
BLEQ带链接等于跳转(Branch with Link if EQual)
BLLT带链接小于跳转(Branch with Link if Less Than)
BLT小于跳转(Branch if Less Than)

BLX

带链接的切换跳转

BX

切换跳转

CDP CDP2

协处理器数据处理操作

CLZ

零计数

CMN

比较两个数的相反数

CMP

32位数比较

EOR

32位逻辑异或

LDC LDC2

从协处理器取一个或多个32位值

LDM

从内存送多个32位字到ARM寄存器

LDR

从虚拟地址取一个单个的32位值

MCR MCR2 MCRR

从寄存器送数据到协处理器

MLA

32位乘累加

MOV

传送一个32位数到寄存器

MRC MRC2 MRRC

从协处理器传送数据到寄存器

MRS

把状态寄存器的值送到通用寄存器

MSR

把通用寄存器的值传送到状态寄存器

MUL

32位乘

MVN

把一个32位数的逻辑“非”送到寄存器

ORR

32位逻辑或

PLD

预装载提示指令

QADD

有符号32位饱和加

QDADD

有符号双32位饱和加

QSUB

有符号32位饱和减

QDSUB

有符号双32位饱和减

RSB

逆向32位减法

RSC

带进位的逆向32法减法

SBC

带进位的32位减法

SMLAxy

有符号乘累加(16位*16位)+32位=32位

SMLAL

64位有符号乘累加((32位*32位)+64位=64位)

SMALxy

64位有符号乘累加((32位*32位)+64位=64位)

SMLAWy

号乘累加((32位*16位)>>16位)+32位=32位

SMULL

64位有符号乘累加(32位*32位)=64位

SMULxy

有符号乘(16位*16位=32位)

SMULWy

有符号乘(32位*16位>>16位=32位)

STC STC2

从协处理器中把一个或多个32位值存到内存

STM

把多个32位的寄存器值存放到内存

STR

把寄存器的值存到一个内存的虚地址内间

SUB

32位减法

SWI

软中断

SWP

把一个字或者一个字节和一个寄存器值交换

TEQ

等值测试

TST

位测试

UMLAL

64位无符号乘累加((32位*32位)+64位=64位)

UMULL

64位无符号乘累加(32位*32位)=64位

详解

1.跳转指令

通过直接向PC寄存器中写入目标地址值可以实现在4GB地址空间中任意跳转,这种跳转指令又称为长跳转。如果在长跳转指令之前使用MOV LR,PC等指令,则可以保存将来返回的地址值,这样就实现了在4GB地址空间中的子程序调用。

在ARM版本5及以上的体系中,实现了ARM指令集和Thumb指令集的混合使用。指令使用目标地址值的bit[0]来确定目标程序的类型。bit[0]的值为1时,目标程序为Thumb指令;bit[0]值为0时,目标程序为ARM指令。

在ARM版本5以前的体系中,传送到PC寄存器中的目标地址值的低两位bits[1∶0]被忽略,跳转指令只能在ARM指令集中执行,即程序不能从ARM状态切换到Thumb状态。非T系列ARM版本5体系不含Thumb指令,当程序试图切换到Thumb状态时,将产生未定义指令异常中断。

ARM跳转指令可以从当前指令向前或向后的32MB地址空间跳转。这类跳转指令有以下4种。

(1)B 跳转指令

B〔条件) (地址)

B指令属于ARM指令集,是最简单的分支指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的地址,从那里继续执行。注意:存储在分支指令中的实际值是相对当前R15的值的一个偏移量,而不是一个绝对地址。它的值由汇编器来计算,是24位有符号数,左移两位后有符号扩展为32位,表示的有效偏移位为26位(+/- 32 MB)。

(2)BL 带返回的跳转指令

BI,〔条件) (地址)

BL指令也属于ARM指令集,是另一个分支指令。就在分支之前,在寄存器R14中装载上R15的内容,因此可以重新装载R14到R15中来返回到这个分支之后的那个指令处执行,它是子例程的一个基本但强力的实现。

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

BLX <地址>

BLX指令有两种格式,第1种格式的BLX指令记作BLX(1)。BLX(1)从ARM指令集跳转到指令中指定的目标地址,并将程序状态切换到Thumb状态,该指令同时将PC寄存器的内容复制到LR寄存器中。

BLX(1)指令属于无条件执行的指令。

第2种格式的BLX指令记作BLX(2)。BLX(2)指令从ARM指令集跳转到指令中指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器<dest>中,该地址的bit[0]值为0,目标地址处的指令类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。

(4)BX 带状态切换的跳转指令

BX(条件) (dest)

BX指令跳转到指令中指定的目标地址,目标地址处的指令可以是ARM指令,也可以是Thumb指令。目标地址值为指令的值和0xFFFFFFFE做“与”操作的结果,目标地址处的指令类型由寄存器决定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值