ARM指令系统数据传输指令Mov传送指令Mov指令将shift_operand表示的数据传送到目标寄存器RD中,并根据操作的结果更新CPSR中相应的条件标志位Mov传送指令Mov指令可以完成以下功能:1.将数据从一个寄存器传送到另一个寄存器2.将一个常数传送到一个寄存器中3.当PC作为目标寄存器时可实现程序跳转,这种跳转可实现子程序调用以及从子程序中返回。4.当PC作为目标寄存器且指令中S位被设置时,指令在执行跳转的同时,将当前处理器模式的SPSR寄存器内容复制到CPSR中,这样,指令movspc,lr可实现从某些异常中断中返回。Mvn传送指令Mvn指令将shift_operand表示的数据的反码传送到目标寄存器RD中,并根据操作的结果更新CPSR中相应的条件标志位指令的用途1.向寄存器中传送一个负数2.生成位掩码3.求一个数的反码Add加法指令Add指令将shift_operand表示的数据与寄存器RD中的值相加,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位用途:实现两个操作数相加例:addrx,rx,#1Addrd,rx,rx,lsl#nAdc带位加法指令Adc指令将shift_operand表示的数据与寄存器RD中的值相加,再加上CPSR中的C条件标志位的值,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位Adc带位加法指令指令的用途Adc指令和add指令联合使用可实现两个64位操作数的相加。例:设寄存器r0和r1中放置一个64位源操作数,其中r0中放置低32位数值;r2和r3中放置另一个64位源操作数,其中r2中放置低32位数值,则俩个64位数的加法操作为:Addsr4,r0,r2Adcr5,r1,r3Sub减法指令Sub指令从寄存器RN中减去shift_operand表示的数据,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位指令用途:实现两个操作数相减Subrx,rx,#1Sbc带位减法指令Sub指令从寄存器RN中减去shift_operand表示的数据,再减去CPSR中的C条件标志位的反码,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位Sbc带位减法指令指令的用途sbc指令和subs指令联合使用可实现两个64位操作数的相减。例:设寄存器r0和r1中放置一个64位源操作数,其中r0中放置低32位数值;r2和r3中放置另一个64位源操作数,其中r2中放置低32位数值,则俩个64位数的减法操作为:subsr4,r0,r2sbcr5,r1,r3Rsb逆向减法指令rsb指令从shift_operand表示的数据中减去寄存器RD的值,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位例:Rsbrd,rx,#0Rsbrd,rx,rx,lsl#nRsc带位逆向减法指令rsc指令从shift_operand表示的数据中减去寄存器RD的值,再减去CPSR中C条件标志位的反码,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位Rsc带位逆向减法指令例:求一个64位数的负数。64位数放在寄存器r0,r1中,其负数放在r2,r3中,其中r0,r2中放低32位值Rsbsr2,r0,#0Rscr3,r1,#0逻辑指令And逻辑与操作指令And指令将shift_operand表示的数据与寄存器RD的值按位作逻辑与操作,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位And逻辑与操作指令指令用途And指令可用于提取寄存器中某些位的值。具体做法是设置一个掩码值,将该值中对应于寄存器中欲提取的位设1,其他位设为0。将寄存器的值与该掩码值作与操作。Orr逻辑或操作指令orr指令将shift_operand表示的数据与寄存器RD的值按位作逻辑或操作,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位Orr逻辑或操作指令指令用途orr指令可用于将寄存器中某些位的值置1。具体做法是设置一个掩码值,将该值中对应于寄存器中欲置位的位设1,其他位设为0。将寄存器的值与该掩码值作或操作。eor逻辑异或操作指令eor指令将shift_operand表示的数据与寄存器RD的值按位作逻辑异或操作,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位eor逻辑异或操作指令用途:Eor指令可用于将寄存器中某些位的值取反。将某一位与0做异或操作,该位值不变;与1做异或操作,该位置将被求反。Bic位清除指令Bic指令将shift_operand表示的数据与寄存器RD的值的反码按位作逻辑与操作,并把结果保存在RD中,同时根据操作的结果更新CPSR中相应的条件标志位可用于将寄存器中某些位的值设置为0。比较指令Cmp比较指令Cmp指令从寄存器RN中减去shifter_operand表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。Cmp指令与subs指令的区别在于cmp指令不保存操作结果。Cmn基于相反数的比较指令Tst位测试指令Teq相等测试指令乘法指令Mul32位乘法指令Mul实现两个32位数的乘积,并将结果存放到一个32位的寄存器中,同时根据运算结果设置CPSR中相应的条件标志位由于两个32位的数相乘结果为64位,mul指令仅仅保存了结果的低32位,所以对于带符号的和无符号的操作数来说mul指令执行的结果相同。寄存器为r15时,指令执行的结果不可预测MlaMla实现两个32位数的乘积,再将乘积加上第3个操作数,并将结果存放到一个32位的寄存器中,同时根据运算结果设置CPSR中相应的条件标志位Mlar0,r1,r2,r3Smull64有符号数乘法指令smull实现两个32位有符号数的乘积,乘积结果的高32位存放到一个32位的寄存器RDHI中,低32位存放到另一个32位的寄存器RDLO中,同时根据运算结果设置CPSR中相应的条件标志位Smullr1,r2,r3,r4r1=(r3*r4)低32位r2=(r3*r4)高32位程序状态访问指令程序状态访问指令用于在状态寄存器和通用寄存器之间传送数据通常修改状态寄存器是通过“读取—修改—写回”