Thumb指令集之:Thumb數(shù)據(jù)處理指令
下面詳細(xì)介紹各指令的語法和使用。
11.4.1ADC指令
(1)編碼格式
帶進(jìn)位的加法指令A(yù)DC的編碼格式如圖11.7所示。
圖11.7ADC指令的編碼格式
帶進(jìn)位的ADC指令和加法指令A(yù)DD配合使用可以實(shí)現(xiàn)多字相加(multi-word),詳見ARM指令集介紹。
(2)指令的語法格式
ADCRd>,Rm>
①Rd>
第一個(gè)操作數(shù)寄存器,并且是操作結(jié)果的目的寄存器。
②Rm>
第二操作數(shù)寄存器。
(3)指令操作的偽代碼
Rd=Rd+Rm+CFlag
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=CarryFrom{Rd+Rm+CFlag}
VFlag=OverflowFrom{Rd+Rm+CFlag}
(4)對(duì)應(yīng)的ARM指令
ADCSRd>,Rd>,Rm>
11.4.2小立即數(shù)加法指令A(yù)DD(1)
(1)編碼格式
立即數(shù)加法指令A(yù)DD(1)的編碼格式如圖11.8所示。
圖11.8ADD(1)指令的編碼格式
ADD加法指令實(shí)現(xiàn)“小常數(shù)”的加法運(yùn)算,并將相加的結(jié)果保存到指定的寄存器中。
(2)指令的語法格式
ADDRd>,Rn>,#immed_3>
①Rd>
加法操作的目標(biāo)寄存器。
②Rn>
操作數(shù)寄存器。
③#immed_3>
3位的立即數(shù)。該立即數(shù)將和寄存器Rn>的值相加,并將結(jié)果保存到Rd>中。
(3)指令操作的偽代碼
Rd=Rn+immed_3
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=CarryFrom{Rn+immed_3}
VFlag=OverflowFrom{Rn+immed_3}
(4)對(duì)應(yīng)的ARM指令
ADDSRd>,Rn>,#immed_3>
11.4.3大立即數(shù)加法指令A(yù)DD(2)
(1)編碼格式
立即數(shù)加法指令A(yù)DD(2)的編碼格式如圖11.9所示。
圖11.9ADD(2)指令的編碼格式
此中形式的ADD(2)指令將一個(gè)大的立即數(shù)(8bit)與指定寄存器的值相加,并將運(yùn)算結(jié)果保存到此寄存器中。
(2)指令的語法格式
ADDRd>,#immed_8>
①Rd>
加法操作的目標(biāo)寄存器。
②#immed_8>
8位的立即數(shù)。該立即數(shù)將和寄存器Rd>的值相加,并將結(jié)果保存到Rd>中。
(3)指令操作的偽代碼
Rd=Rd+immed_8
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=CarryFrom{Rn+immed_8}
VFlag=OverflowFrom{Rn+immed_8}
(4)對(duì)應(yīng)的ARM指令
ADDSRd>,Rd>,#immed_8>
評(píng)論