数据处理指令
数据传送指令
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)