arm汇编指令

数据处理指令

数据传送指令

MOV:传送

(Move)

MVN:传送取反的值

(Move Negative)
MVN{条件}{S} ,
:dest = !op_1
MVN 从另一个寄存器、被移位的寄存器、或一个立即值装载一个值到目的寄存器。不同之处是在传送之前位被反转了,所以把一个被取反的值传送到一个寄存器中。这是逻辑非操作而不是算术操作,这个取反的值加 1 才是它的取负的值:
MVN R0, #4
: R0 = -5

算术运算指令

加法

ADD : 加法

(Addition)

ADC:带进位的加法

(Addition with Carry)
ADC{条件}{S} < dest >, < op 1 > , < op 2 >
:dest = op_1 + op_2 + carry

减法

SUB:减法

(Subtraction)
SUB{条件}{S} < dest >, < op 1 >, < op 2 >
:dest = op_1 - op_2

SBC:带借位的减法

(Subtraction with Carry)
SBC{条件}{S} < dest>, < op 1>, < op 2>
:dest = op_1 - op_2 - !carry

RSB:反向减法

(Reverse Subtraction)
RSB{条件}{S} < dest>, < op 1>, < op 2>
:dest = op_2 - op_1

RSC:带借位的反向减法

(Reverse Subtraction with Carry)
RSC{条件}{S} < dest>, < op 1>, < op 2>
:dest = op_2 - op_1 - !carry

乘法

MUL:乘法

(Multiplication)
MUL{条件}{S} < dest>, < op 1>, < op 2>
:dest = op_1 * op_2

MLA:带累加的乘法

(Multiplication with Accumulate)
MLA{条件}{S} < dest>, < op 1>, < op 2>, < op 3>
: dest = (op_1 * op_2) + op_3

SMULL:64位有符号数乘法指令
SMLAL:64位带加数的有符号数乘法指令
UMULL:64位无符号数乘法指令
UMLAL:64位带加数的无符号数乘法指令

逻辑运算指令

AND:逻辑与

(logical AND)
AND{条件}{S} < dest>, < op 1>, < op 2>
:dest = op_1 AND op_2

BIC:位清除

(Bit Clear)
BIC{条件}{S} , ,
:dest = op_1 AND (!op_2)

ORR:逻辑或

(logical OR)
ORR{条件}{S} < dest>, < op 1>, < op 2>
:dest = op_1 OR op_2

EOR:逻辑异或

(logical Exclusive OR)
EOR{条件}{S} < dest>, < op 1>, < op 2>
:dest = op_1 EOR op_2

比较指令

CMP:比较

(Compare)
CMP 允许把一个寄存器的内容如另一个寄存器的内容或立即值进行比较,更改状态标志来允许进行条件执行。它进行一次减法,但不存储结果,而是正确的更改标志。标志表示的是操作数 1 比操作数 2 如何(大小等)。如果操作数 1 大于操作操作数 2,则此后的有 GT 后缀的指令将可以执行。
明显的,你不需要显式的指定 S 后缀来更改状态标志… 如果你指定了它则被忽略。

CMN:比较取负的值

(Compare Negative)
CMN R0, #1 ; 把 R0 与 -1 进行比较

TST:测试位

(Test bits)

TEQ:测试等价

(Test Equivalence)

移位指令

LSL:逻辑左移

(Logical Shift Left)

ASL:算术左移

(Arithmetic Shift Left)

LSR:逻辑右移

(Logical Shift Right)

ASR:算术右移

(Arithmetic Shift Right)

ROR:循环右移

(Rotate Right)

RRX:带扩展的循环右移

(Rotate Right with extend)

跳转指令

B:跳转指令

(Branch)

BL:带返回的跳转指令

(Branch with Link)

BX:带状态切换的跳转指令

BLX:两者都带的跳转指令

程序状态器传输指令

MRS:状态寄存器到通用寄存器的传送指令

MSR:通用寄存器到状态寄存器的传送指令

Load/Store指令

内存访问指令

读取指令 : LDR类

指令解释
LDR字数据读取
LDRB字节数据读取
LDRBT用户模式的字节数据读取
LDRH半字数据读取
LDRSB有符号的字节数据读取
LDRSH有符号的半字数据读取
LDRT用户模式的字数据读取

存储指令 : STR类

指令解释
STR字数据写入
STRB字节数据写入
STRBT用户模式的字节数据写入
STRH半字数据写入
STRT用户模式字数据写入

批量内存访问指令

批量读取:LDM
批量存储:STM

SWP:单一数据交换

(Swap)
SWP{条件}{B} < dest>, < op 1>, [< op 2>]
指令格式
SWP 将:从操作数 2 所指向的内存装载一个字并把这个字放置到目的寄存器中。
把寄存器操作数 1 的内容存储到同一个地址中。

协处理器指令

MCR:ARM寄存器到协处理器寄存器的数据传送指令

MRC:协处理器寄存器到ARM寄存器的数据传送指令

STC:协处理器写入指令

LDC:协处理器数据读取指令

CDP:协处理器数据操作指令

中断产生指令

SWI:软中断指令

(Software Interrupt)

BKPT:断点中断指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值