本节介绍寄存器传输指令,下面对这些指令进行详细说明。
1.MOVS<Rd>,#imm8
该指令将[7:0]位所指定的立即数imm8(范围为0~255)写到寄存器Rd中。该汇编助记符指令的机器码格式如图4.6所示。从该指令格式的机器码格式可知,Rd寄存器的使用范围为R0~R7。
图4.6 MOVS<Rd>,#imm8指令的机器码格式
指令MOVS R1,#0x14,其机器码为(2114) 16 。该指令将立即数0x14的内容写到寄存器R1中。并且更新APSR寄存器中的标志N、Z和C,但不修改标志V。
注: (2114)的下标16表示2114为十六进制数。
2.MOV<Rd>,<Rm>
该指令将寄存器Rm的内容写到寄存器Rd中。该汇编助记符指令的机器码格式如图4.7所示。从该指令的机器码格式可知,Rm可用的寄存器范围为R0~R15,Rd可用的寄存器范围为R0~R7。当Rd和D组合在一起使用时,可用的寄存器范围扩展到R0~R15。
图4.7 MOV<Rd>,<Rm>指令的机器码格式
指令MOV R0,SP,其机器码为(4668) 16 ,将SP的内容写到寄存器R0中,不更新APSR寄存器中的标志。
3.MOVS<Rd>,<Rm>
该指令将寄存器Rm的内容复制到寄存器Rd中,并且更新APSR寄存器中的标志Z和N,该汇编助记符指令的机器码格式如图4.8所示。从该指令的机器码格式可知,Rm可用的寄存器范围为R0~R7,Rd可用的寄存器范围为R0~R7。
图4.8 MOVS<Rd>,<Rm>指令的机器码格式
指令MOVS R0,R1,其机器码为(0008) 16 。该指令将寄存器R1的内容复制到寄存器R0中,并且更新APSR寄存器中的标志N和Z,并不修改标志C和V。
4.MRS<Rd>,<SpecialReg>
该指令是32位的Thumb指令,将由SpecialReg标识的特殊寄存器内容写到寄存器Rd中。该指令不影响APSR寄存器中的任何标志位。该汇编助记符指令的机器码格式如图4.9所示。从该指令的机器码格式可知,可用的Rd寄存器范围为R0~R15。
图4.9 MRS<Rd>,<SpecialReg>指令的机器码格式
SYSm的定义如表4.2所示。
表4.2 SYSm的定义
指令MRS R1,CONTROL,其机器码为(F3EF8514) 16 。该指令将CONTROL寄存器的内容写到寄存器R1中。
5.MSR<SpecialReg>,<Rn>
该指令将寄存器Rn中的内容写到SpecialReg标识的特殊寄存器中。该指令影响APSR寄存器中的标志N、Z、C和V。该汇编助记符指令的机器码格式如图4.10所示。从该指令的机器码格式可知,可用的Rn寄存器的范围为R0~R15。
图4.10 MSR<SpecialReg>,<Rn>指令的机器码格式
指令MSR APSR,R0,其机器码为(F3808800) 16 ,将寄存器R0的内容写到APSR寄存器中。
思考与练习4.3:说明以下指令实现的功能。
(1)MOVS R0,#0x000B_______________________________________
(2)MOVS R1,#0x0________________________________________
(3)MOV R10,R12________________________________________
(4)MOVS R3,#23________________________________________
(5)MOV R8,SP________________________________________