|
1.ADD与SUB——低寄存器加法和减法
对于低寄存器操作,这2条指令各有如下3种形式:
2个寄存器的内容相加或相减,结果放到第3个寄存器中;
寄存器中的值加上或减去一个小整数,结果放到另一个不同的寄存器中;
寄存器中的值加上或减去一个大整数,结果放回同一个寄存器。
格式
op Rd,Rn,Rm
op Rd,Rn,#expr3
op Rd,#expr8
其中: Rd 目的寄存器。它也用作“op Rd,#expr
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,R
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访问凌阳教育官网