Thumb指令集之:Thumb數(shù)據(jù)處理指令
11.4.28邏輯或指令ORR
(1)編碼格式
邏輯或指令ORR的編碼格式如圖11.34所示。
圖11.34ORR指令的編碼格式
ORR指令將兩個(gè)寄存器的值做按位做或運(yùn)算,并根據(jù)指令的執(zhí)行結(jié)果更新程序狀態(tài)寄存器的標(biāo)志位。
(2)指令的語(yǔ)法格式
ORRRd>,Rm>
①Rd>
目的寄存器,存放指令的操作結(jié)果,存放做邏輯或運(yùn)算的其中一個(gè)操作數(shù)。
②Rm>
存放做邏輯或運(yùn)算的另一個(gè)操作數(shù)。
(3)指令操作的偽代碼
Rd=RdORRm
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=unaffected
VFlag=unaffected
(4)對(duì)應(yīng)的ARM指令
ORRSRd>,Rd>,Rm>
11.4.29循環(huán)右移指令ROR
(1)編碼格式
循環(huán)右移指令ROR的編碼格式如圖11.35所示。
圖11.35ROR指令的編碼格式
ROR指令將一個(gè)給定寄存器的值循環(huán)右移一定的位數(shù)。并根據(jù)指令的操作結(jié)果更新狀態(tài)寄存器的條件標(biāo)志位。詳見指令操作偽代碼。
(2)指令的語(yǔ)法格式
RORRd>,Rs>
①Rd>
目的寄存器。存儲(chǔ)指令的操作結(jié)果和被移位的數(shù)值。
②Rs>
循環(huán)左移的位數(shù)。
(3)指令操作的偽代碼
ifRs[7:0]==0then
CFlag=unaffected
Rd=unaffected
ElseifRs[4:0]==0then
CFlag=Rd[31]
Rd=unaffected
Else/*Rs[4:0]>0*/
CFlag=Rd[Rs[4:0]-1]
Rd=RdRotate_RightRs[4:0]
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
VFlag=unaffected
(4)對(duì)應(yīng)的ARM指令
MOVSRd>,Rd>,RORRs>
11.4.30帶進(jìn)位的減指令SBC
(1)編碼格式
帶進(jìn)位的減指令SBC的編碼格式如圖11.36所示。
圖11.36SBC指令的編碼格式
SBC指令從指定寄存器中減去另一個(gè)寄存器的數(shù)值,再減去寄存器CPSR中C條件標(biāo)志位的反碼,并把結(jié)果保存到目標(biāo)寄存器中,同時(shí)根據(jù)操作的結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志位。
(2)指令的語(yǔ)法格式
SBCRd>,Rm>
①Rd>
被減數(shù)寄存器,同時(shí)保存指令的操作結(jié)果。
②Rm>
減數(shù)寄存器,保存減法操作的減數(shù)。
(3)指令操作的偽代碼
Rd=Rd–Rm–NOT(CFlag)
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=NOTBorrowFrom(Rd–Rm–NOT(CFlag))
VFlag=OverflowFrom(Rd–Rm–NOT(CFlag))
(4)對(duì)應(yīng)的ARM指令
SBCSRd>,Rd>,Rm>
評(píng)論