马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
1.ADD与SUB——低寄存器加法和减法 对于低寄存器操作,这2条指令各有如下3种形式: 2个寄存器的内容相加或相减,结果放到第3个寄存器中; 寄存器中的值加上或减去一个小整数,结果放到另一个不同的寄存器中; 寄存器中的值加上或减去一个大整数,结果放回同一个寄存器。 格式 op Rd,Rn,Rm op Rd,Rn,#expr3 op Rd,#expr8 其中: Rd 目的寄存器。它也用作“op Rd,#expr8”的第1操作数。 Rn 第1操作数寄存器 Rm 第2操作数寄存器 Expr3 表达式或3位立即数,为取值在-7~+7范围内的整数。 Expr8 表达式或8位立即数,为取值在-255~+255范围内的整数。 用法 若expr3或expr8为负值,则ADD指令汇编成相应的带正数常量的SUB指令,SUB指令汇编成相对应的带正数常量的ADD指令。指令中的Rd、Rn和Rm必须是低寄存器。这些指令更新标志N、Z、C和V。 例子 ADD R3,R1,R5 SUB R0,R4,#5 ADD R7,#201 2.ADD——高或低寄存器 将寄存器中值相加,结果送回到第1操作数寄存器。 格式 ADD Rd,Rm 其中:Rd 目的寄存器,也是第1操作数寄存器 Rm 第2操作数寄存器 用法 这条指令将Rd和Rm中的值相加,结果放在Rd中Rd和Rm可以是R0~R15中的任何一个,而不限于只是低寄存器若Rd和Rm是低寄存器,则更新条件码标志N、Z、C和V。其他情况下不更新条件码标志。 注意:若Rd和Rm都是低寄存器,则指令“ADD Rd,Rm”汇编成指令“ADD Rd,Rd,Rm”。 例子 ADD R12,R4 ;R12<-R12+R4 ADD R10,R11 ;R10<-R10+R11 ADD R0,R8 ;R0<-R0+R8 ADD R2,R4 ;等价于“ADD R2,R2,R4”
3.ADD与SUB——SP SP加上或减去立即数常量 格式 ADD SP,#expr SUB SP,#expr 其中:expr为表达式,取指(在汇编时)为在-508~+508范围内的4的整倍数。 用法 这条指令把expr的值加到SP的值上,结果放到SP中。这条指令不影响条件码标志。 注意:若expr为负值,则ADD指令汇编成相对的带正数常量的SUB指令,SUB指令会变成相应的带正数常量的ADD指令。 例子 ADD SP,#312 SUB SP,#96 4.ADD——PC或SP相对偏移 PC或SP值相加一个立即数常量,结果放入低寄存器。 格式 ADD Rd,Rp,#expr 其中:Rd 目的寄存器,Rd必须在R0~R7范围内。 Rp SP或PC Expr 表达式,取指为在0~1020范围内的4的整倍数。 用法 这条指令把expr加到Rp的值中,结果放入Rd。这条指令不影响条件码标志。 注意:若Rp是PC,则使用值是“(当前指令地址+4)AND 0xFFFFFFC”,即忽略地址的低2位。这条指令不影响条件码标志。 例子 ADD R6,SP,#64 ADD R2,PC,#980 5.ADC、SBC和MUL 带进位标志的加法、带进位标志的减法和乘法 格式 op Rd,Rm 其中:Rd 目的寄存器,也是第2操作数寄存器; Rm 第2操作数寄存器 用法 ADC将带进位标志的Rd和Rm的值相加,结果放在Rd中。用这条子指令可组合成多字加法。 SBC考虑进位标志,从Rd的值中减去Rm的值,结果放入Rd中。用这条指令可组合成多字减法。 MUL进行Rd和Rm的值的乘法,结果放入Rd中。 注意:在此操作过程中,Rd和Rm必须是低寄存器(R0~R7). ADC和SBC更新标志N、Z、C、V;MUL更新标志N和Z.在ARMV4及以前的结构中,MUL会使标志C和V不正确。在ARMV5结构及以后的结构中,MUL不影响标志C和V. 例子 ADC R2,R4 ;R2<-R2+R4+C SBC R0,R1 ;R0<-R0-R1-(1-C),其中(1-C)是借位 MUL R7,R6 ;R7<-R7*R6 凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网 |