arm汇编指令

来源:互联网 发布:韩庚sj 知乎 编辑:程序博客网 时间:2024/05/27 21:50

数据处理指令

数据传送指令

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:断点中断指令

0 0
原创粉丝点击