Thumb指令集之:Thumb数据处理指令
11.4.34减法指令SUB(4)
(1)编码格式
减法指令SUB(4)的编码格式如图11.40所示。
图11.40SUB(4)指令的编码格式
SUB(4)指令从堆栈指针SP中减去7位立即数的4倍,也就是说其取值为在0~508范围内4的倍数。
(2)指令的语法格式
SUBSP,#immed_7>×4
①SP
程序的堆栈指针,同时也为指令的目的寄存器,存放指令的运算结果。
②immed_7>
7位立即数,其值的4倍将作为减数参加运算。
(3)指令操作的伪代码
SP=SP–(immed_72)
注意 | 在Thumb指令集中,使用满递减堆栈,该指令常被用于元素的入栈操作。 |
(4)对应的ARM指令
SUBSP,SP,#immed_7>*4
11.4.35位测试指令TST
(1)编码格式
位测试指令TST的编码格式如图11.41所示。
图11.41TST指令的编码格式
TST指令将两个寄存器的值按位做逻辑与操作,并根据指令的执行结果更新CPSR中相应的条件标志位。TST指令常被用于测试寄存器中某一位是否置位。
(2)指令的语法格式
TSTRn>,Rm>
①Rn>
操作数寄存器,用于存放指令的第一个操作数。
②Rm>
操作寄存器,该寄存器中的值将和Rn>寄存器中的值做逻辑与操作。
(3)指令操作的伪代码
alu_out=RnANDRm
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=unaffected
VFlag=unaffected
(4)对应的ARM指令
TSTRn>,Rm>
11.4.36Thumb指令集中数据操作指令举例
下面的例子程序综合使用了各种数据操作指令,通过该例可以对Thumb状态下数据操作指令有更深入的了解。
ADDr0,r4,r7 ;r0=r4+r7
SUBr6,r1,r2 ;r6=r1–r2
ADDr0,#255 ;r0=r0+255
ADDr1,r4,#4 ;r1=r4+4
NEGr3,r1 ;r3=0–r1
ADDr2,r5 ;r2=r2ANDr5
EORr1,r6 ;r1=r1EORr6
CMPr2,r3 ;r2–r3,并更新CPSR
CMPr7,#100 ;r7–100,并更新CPSR
MOVr0,#200 ;r0=200
评论