指令系统1(数据传输指令)
一.ARM 指令基本格式:opcode{<cond>}{S}<Rd>,<Rn>{,operand2}
-
opcode:即操作码,是指令助记符,像
MOV
(数据传送)、ADD
(加法运算)等,用于明确指令要执行的操作类型。 -
cond:为可选条件码,决定指令在何种条件下执行。例如
EQ
(相等,Z
标志位置位时)、NE
(不相等,Z
标志位清零时)等,通过对标志位的判断来确定指令是否执行。 -
S:是可选后缀,若指令中指定了
S
,那么指令执行结果会用于更新 APSR(应用程序状态寄存器)中的条件码,影响后续条件指令的执行。 -
Rd:代表目标寄存器,指令执行结果将存储在该寄存器中。
-
Rn:存放第 1 操作数的寄存器,为指令运算提供一个操作数来源。
-
operand2:表示第 2 个操作数,它的形式多样,能够是立即数、寄存器值或经过移位等操作后的结果。
二.条件码
-
条件码标志
含义
条件码标志
含义
EQ
Z
置位,相等 / 等于 0VC
V
清零,未溢出NE
Z
清零,不相等LS
C
清零且N
置位,无符号数小于等于CS
C
置位,无符号数大于等于GE
N
等于V
,带符号数大于等于CC
C
清零,无符号数小于LT
N
不等于V
,带符号数小于MI
N
置位,负数GT
Z
清零且N
等于V
,带符号数大于PL
N
清零,正数或零LE
Z
置位或者N
不等于V
,带符号数小于等于VS
V
置位,溢出AL
忽略,无条件执行
三.第 2 操作数的表示形式:包含多种移位操作,这些操作可用于对操作数进行变换,以满足不同的运算需求。
-
逻辑移位:
LSL
(逻辑左移)、LSR
(逻辑右移) 。 -
算术移位:
ASL
(算术左移,与逻辑左移在某些情况下效果相同)、ASR
(算术右移)。 -
循环移位:
ROR
(循环右移)、RRX
(带扩展的循环右移)。例如ADDEQS R3,R2,R1,LSR#5
,表示在相等条件下,将R1
逻辑右移 5 位后与R2
相加,结果存入R3
。
四.数据传送指令
-
立即数加载到寄存器
-
指令格式:
-
MOV Rd,#<immed_8>
(8 位立即数加载寄存器Rd
); -
MOVS.W Rd,#<immed_16>
(16 位立即数加载寄存器Rd
且影响标志); -
MOVT.W Rd,#<immed_16>
(16 位立即数加载寄存器Rd
的高半字); -
MOVW.W Rd,#<immed_16>
(16 位立即数加载寄存器Rd
的低半字,高 16 位清 0 )。
-
-
示例:
-
MOV R0,#0X80
,R0 = 0X00000080
; -
MOVS.W R1,#0X1200
,R1 = 0X00001200
且影响标志; -
MOVT.W R2,#0X1234
,R2 = 0X12340000
; -
MOVW.W R2,#0X1234
,R2 = 0X00001234
。
-
-
-
两个寄存器之间的传送
-
指令格式:
MOV Rd,Rm
。 -
示例:
MOV R3,R2
;MOV R2,#0X10
,MOVS.W R3,R2,LSR2
,R3
结果为 4。
-
-
寄存器与特殊功能寄存器之间的传送
-
指令格式:
MRS <Rn>,<SReg>
(加载特殊功能寄存器的值到Rn
);MSR <Sreg>,<Rn>
(传送Rn
的值到特殊功能寄存器) 。 -
示例:
MRS R0,IPSR
,MSR IPSR,R0
。 -
特殊功能寄存器:如
IPSR
(当前服务中断号寄存器)、EPSR
(执行状态寄存器)、APSR
(上条指令结果的标志寄存器)等,MRS/MSR
用于特权级别条件下访问这些特殊功能寄存器。
-