B
BL会把当前PC指针的值加4保存到R14里。
MOV{条件}{S} 目的寄存器 ,源操作数
只能用在通用寄存器的操作
MOV R1,R0 将寄存器R0的值传送到R1里
MVN{条件}{S} 目的寄存器 ,源操作数
在传送之前按位取反,即把一个被取反的值传送到目的
寄存器中。
S决定指令操作是否影响CPSR中条件标志位的值,没有S
时指令不更新CPSR中条件标志位的值。
CMP{条件}操作数1,操作数2
把两个操作数进行比较,同时更新CPSR中条件标志位的值
该指令进行一次减法运算,不存储结果,只更改条件标志位
![](http://static.oschina.net/uploads/img/201512/22193243_nnsQ.png)
TST{条件 }操作数1,操作数2
把一个寄存器的内容和另一个寄存器的内存或立即数进行按位与运算,并
更新CPSR中条件标志位的值,当位与结果为0时,EQ位被设置。
TST R5,#(1<<23)
;当bit23位为1时,CPSR EQ位被设置
ADD{条件}{S}目的寄存器,操作数1,操作数2
将两个操作数相加,把结果放在目的寄存器中。
;ADD指令
MOV
R1,#1
MOV
R2,#2
MOV
R3,#3
ADD
R0,R1,R2
;R0=R1+R2
ADD
R0,R1,#256
;R0=R1+256
ADD R0,R2,R3,LSL#1 ;R0=R2+(R3<<1)
SUB{条件}{S}目的寄存器,操作数1,操作数2
用操作数1减操作数2,将差值放在目的寄存器中
MOV R1,#100
MOV
R2,#8
SUB
R0,R1,R2
;R0=R1-R2
SUB R0,R1,#55 ;R0=R1-55
AND{条件}{S}目的寄存器,操作数1,操作数2
两个操作数进行逻辑与运算,把结果存进目的寄存器中
常用于屏蔽操作数1的某些位。
;AND指令
MOV
R0,#0xff
AND R0,R0,#3 ;逻辑与运算,R0 = R0 & 3
ORR{条件}{S}目的寄存器,操作数1,操作数2
用于两个操作数进行逻辑或运算,把结果存到目的寄存器
中。该指令常用于设置操作数1的某些位。
BIC{cond}{S}Rd,Rn,operand2
用于清除Rn中的某些位,把结果存放在Rd中,
操作数operand2为32位的掩码,如果掩码中设置
了某一位为1,则清除这一位。
掩码中有1的位清零
;BIC指令
MOV
R0,#0x77
BIC R0,R0,#0x0b ;将R0的bit0,bit1,bit3清零,其余位不变
MUL{条件}{S}目的寄存器,操作数1,操作数2
将操作数1和操作数2的乘法运算,结果存到目的寄存器
根据结果更新CPSR中相应条件标志位。
操作数1和操作数2均为32位的有符号数或无符号数。
MRS{条件}通用寄存器,程序状态寄存器(CPSR,SPSR)
将程序状态寄存器的内容传送到通用寄存器中,
当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存
器的内容读入通用寄存器,修改后再写回程序状态寄存器
MSR{条件}程序状态寄存器(CPSR,SPSR)_<域>,操作数
将操作数的内容传送到程序状态寄存器的特定域中。
位[31:24]为条件标志位域,用
f表示,位[23:16]为状态位域,用
s表示
位[15:8]为扩展位域,用
x表示 位[7:0]为控制位域,用
c表示
;MRS指令(将CPSR或者SPSR的内容传送到通用寄存器)
MRS
R0,CPSR
;传送CPSR的内容到R0
MRS R1,SPSR ;传送SPSR的内容到R1
LDR{条件}目的寄存器,<存储器地址>
从存储器中将一个32位的字数据传
送到目的寄存器中,通用寄存器
;LDR指令
LDR
R1,=0x30003100
;R1=0x30003100,
LDR
R0,[R1]
;R0=[R1]
LDR R0,[R1,#4] ;R0=[R1+4]
读32位的数
STR{条件}源寄存器,<存储器地址>
用于从源寄存器中将一个32位的字数据
传送到存储器中
;STR指令,内存地址0x30003100=0xab
LDR
R1,=0x30003100 ; C : \
MOV
R0,#0xab i l e s
STR R0,[R1]
;将R0中的字数据写入以R1为地址的存储器中
STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中
LDM 批量数据加载指令
LDM{条件}{类型}基址寄存器{!},寄存器列表{^}
从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器
之间传送数据,常见用途是将多个寄存器的内容入栈或出栈。
LDMFD R13!,{R0,R4-R12,PC}
出栈
STM 批量数据存储 指令
STMFD R13!,{R0,R4-R12,LR}
入栈 !表示自动增加,跟*AR0+一样
SWP{条件}目的寄存器,源寄存器1[,源寄存器2]
将源寄存器2所指向的存储器中的字数据传送到目的寄存器中,
同时将源寄存器1中的字数据传送到源寄存器2所指向的存储器中。
当源寄存器1和目的寄存器为同一个寄存器时,指令交换该寄存器
和存储器的内容。
LSL
通用寄存器,LSL操作数 逻辑左移
MOV R0,R1,LSL#2 将R1中的内容左移两位后传送到R0中。
ROR
通用寄存器,ROR操作数 循环右移
MOV R0,R1,ROR#2 将R1中的内容循环右移两位后传送到R0中。
异常产生指令
SWI 软件中断指令
SWI{条件}24位的立即数
SWI用于产生软件中断,以便用户程序能调用操作系统的系统API,
操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24
位的立即数指定用户程序调用的API类型。
SWI 0x02
该指令调用操作系统编号位02的系统例程。
BKPT 断点中断指令