Thumb指令集之:Thumb數(shù)據(jù)處理指令
11.4.34減法指令SUB(4)
(1)編碼格式
減法指令SUB(4)的編碼格式如圖11.40所示。
圖11.40SUB(4)指令的編碼格式
SUB(4)指令從堆棧指針SP中減去7位立即數(shù)的4倍,也就是說(shuō)其取值為在0~508范圍內(nèi)4的倍數(shù)。
(2)指令的語(yǔ)法格式
SUBSP,#immed_7>×4
①SP
程序的堆棧指針,同時(shí)也為指令的目的寄存器,存放指令的運(yùn)算結(jié)果。
②immed_7>
7位立即數(shù),其值的4倍將作為減數(shù)參加運(yùn)算。
(3)指令操作的偽代碼
SP=SP–(immed_72)
注意 | 在Thumb指令集中,使用滿遞減堆棧,該指令常被用于元素的入棧操作。 |
(4)對(duì)應(yīng)的ARM指令
SUBSP,SP,#immed_7>*4
11.4.35位測(cè)試指令TST
(1)編碼格式
位測(cè)試指令TST的編碼格式如圖11.41所示。
圖11.41TST指令的編碼格式
TST指令將兩個(gè)寄存器的值按位做邏輯與操作,并根據(jù)指令的執(zhí)行結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志位。TST指令常被用于測(cè)試寄存器中某一位是否置位。
(2)指令的語(yǔ)法格式
TSTRn>,Rm>
①Rn>
操作數(shù)寄存器,用于存放指令的第一個(gè)操作數(shù)。
②Rm>
操作寄存器,該寄存器中的值將和Rn>寄存器中的值做邏輯與操作。
(3)指令操作的偽代碼
alu_out=RnANDRm
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=unaffected
VFlag=unaffected
(4)對(duì)應(yīng)的ARM指令
TSTRn>,Rm>
11.4.36Thumb指令集中數(shù)據(jù)操作指令舉例
下面的例子程序綜合使用了各種數(shù)據(jù)操作指令,通過(guò)該例可以對(duì)Thumb狀態(tài)下數(shù)據(jù)操作指令有更深入的了解。
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
評(píng)論