文章目录
概要
下表为减法指令的汇编程序和一条指令所需要的周期数:
序号 | 描述 | 汇编程序 | 所需要的机器周期 |
1 | Lo to Lo | SUBS Rd,Rn,Rm | 1 |
2 | 3-bit immediate | SUBS Rd,Rn,#<imm1> | 1 |
3 | 8-bit immediate | SUBS Rd,Rd,#<imm2> | 1 |
4 | With carry | SBCS Rd,Rd,Rm | 1 |
5 | Immediate from SP | SUB SP,SP,#<imm3> | 1 |
6 | Negate | RSBS Rd,Rn,#0 | 1 |
注:1、指令后加后缀S表示指令操作完成后需要更新APSR寄存器中对应的标志
2、Rd、Rn、Rm只能是R0-R7寄存器中的一个
3、<imm3>的取值范围为0-508,必须是4的整数倍
举例说明
1、SUBS Rd,Rn,Rm 将Rn寄存器的内容减去Rm寄存器的内容,结果保存在寄存器Rd中,并且更新寄存器APSR中的 N、Z、C 和V标志
MOVS R0,#0X2
MOVS R1,#0XF1
SUBS R2,R1,R0
仿真如下,一个时钟周期后,R2寄存器得到相应的值,此时相减操作出现借位,借位标志置位
2、SUBS Rd,Rn,#<imm1> 将Rn寄存器的内容减去3bit的立即数#imm1,结果保存在寄存器,并且更新寄存器APSR中的 N、Z、C 和V标志
MOVS R1,#0X2
SUBS R0,R1,#0X7
仿真如下,一个时钟周期后,R2寄存器得到相应的值,此时相减操作出现复数,复位标志置位
3、SUBS Rd,Rd,#<imm2> 将Rd寄存器的内容减去8bit的立即数#imm2,结果保存在寄存器Rd中,并且更新寄存器APSR中的 N、Z、C 和V标志
MOVS R1,#0X12
SUBS R1,R1,#0X8
仿真如下,一个时钟周期后,R1寄存器得到相应的值,此时相减操作出现借位,借位标志置位
4、SBCS Rd,Rd,Rm 将 Rd 寄存器的内容与Rm 寄存器的内容和借位标志相减,结果保存在寄存器Rd中,并且更新寄存器APSR中的 N、Z、C 和V标志
MOVS R0,0X1F
MOVS R1,#0X12
SUBS R1,R1,#0X8
SBCS R0,R0,R1
5、SUB SP,SP,#<imm3> 将SP寄存器的内容减去立即数#imm3,结果保存在SP寄存器中
SUBS SP,SP,#0X8
仿真如下,此时使用的是MSP指针,可以看到在一个时钟周期后MSP寄存器的值减少了8
6、RSBS Rd,Rn,#0 将数字0减去Rn寄存器的内容,结果保存在寄存器Rd中,并且更新寄存器APSR中的 N、Z、C 和V标志
MOVS R1,#0X12
RSBS R1,R1,#0
未完待续。。。