您的位置:首页 > 其它

arm汇编指令

2016-09-24 22:37 211 查看

数据处理指令

数据传送指令

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: