指令系统1(数据传输指令)
一.ARM 指令基本格式:opcode{<cond>}{S}<Rd>,<Rn>{,operand2}
-
opcode:即操作码,是指令助记符,像
MOV(数据传送)、ADD(加法运算)等,用于明确指令要执行的操作类型。 -
cond:为可选条件码,决定指令在何种条件下执行。例如
EQ(相等,Z标志位置位时)、NE(不相等,Z标志位清零时)等,通过对标志位的判断来确定指令是否执行。 -
S:是可选后缀,若指令中指定了
S,那么指令执行结果会用于更新 APSR(应用程序状态寄存器)中的条件码,影响后续条件指令的执行。 -
Rd:代表目标寄存器,指令执行结果将存储在该寄存器中。
-
Rn:存放第 1 操作数的寄存器,为指令运算提供一个操作数来源。
-
operand2:表示第 2 个操作数,它的形式多样,能够是立即数、寄存器值或经过移位等操作后的结果。
二.条件码
-
条件码标志
含义
条件码标志
含义
EQZ置位,相等 / 等于 0VCV清零,未溢出NEZ清零,不相等LSC清零且N置位,无符号数小于等于CSC置位,无符号数大于等于GEN等于V,带符号数大于等于CCC清零,无符号数小于LTN不等于V,带符号数小于MIN置位,负数GTZ清零且N等于V,带符号数大于PLN清零,正数或零LEZ置位或者N不等于V,带符号数小于等于VSV置位,溢出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用于特权级别条件下访问这些特殊功能寄存器。
-
