Thumb指令集是ARM指令集的一�(gè)子集,是針對(duì)代碼密度�(wèn)題而提出的,它具有16位的代碼寬度。與等價(jià)�32位代碼相比較,Thumb指令集在保留32位代碼優(yōu)�(shì)的同�(shí),大大的節(jié)省了系統(tǒng)的存�(chǔ)空間。Thumb不是一�(gè)完整的體系結(jié)�(gòu),不能指�處理�只執(zhí)行Thumb指令集而不支持ARM指令��
Thumb指令集分為:分支指令、數(shù)�(jù)傳送指令、單寄存器加載和存儲(chǔ)指令以及多寄存器加載和存�(chǔ)指令。Thumb指令集沒(méi)有協(xié)處理器指�、信�(hào)量(semaphore)指令以及訪�(wèn)CPSR或SPSR的指��
1. 存儲(chǔ)器訪�(wèn)指令
?�?)DR和STR--立即�(shù)偏移
加載寄存器和存儲(chǔ)寄存�。存�(chǔ)器的地址以一�(gè)寄存器的立即�(shù)偏移(immediate offset)指��
指令格式�
op Rd, [Rn�#immed_5×4]
opH Rd, [Rn�#immed_5×2]
opB Rd, [Rn�#immed_5×1]
其中�
op:為DR或STR�
H:指明無(wú)符號(hào)半字傳送的參數(shù)�
B:指明無(wú)符號(hào)字節(jié)傳送的參數(shù)�
Rd:加載和存儲(chǔ)寄存器。Rd 必須在R0~R7范圍�(nèi)�
Rn:基址寄存器。Rn 必須在R0~R7范圍�(nèi)�
immed_5×N:偏移量。它是一�(gè)表達(dá)式,其取值(在匯編時(shí))是N的倍數(shù),在�0�31�*N范圍�(nèi),N�4�2�1�
STR:用于存�(chǔ)一�(gè)字、半字或字節(jié)到存�(chǔ)器中�
DR:用于從存儲(chǔ)器加載一�(gè)�、半字或字節(jié)�
Rn:Rn中的基址加上偏移形成操作�(shù)的地址�
立即�(shù)偏移的半字和字節(jié)加載是無(wú)符號(hào)的。數(shù)�(jù)加載到Rd的有效字或字節(jié),Rd 的其余位�(bǔ)0�
字傳送的地址必須可被4整除,半字傳送的地址必須可被2整除�
指令示例�
DR R3,[R5,#0]
STRB R0,[R3,#31]
STRH R7,[R3,#16]
DRB R2,[R4,#1abe-{PC}]
?�?)DR和STR--寄存器偏�
加載寄存器和存儲(chǔ)寄存器。用一�(gè)寄存器的基于寄存器偏移指明存�(chǔ)器地址�
指令格式�
op Rd,[Rn,Rm]
其中,op 是下列情況之一�
DR:加載寄存器�4字節(jié)字�
STR:存�(chǔ)寄存��4字節(jié)��
DRH:加載寄存器�2字節(jié)�(wú)符號(hào)半字�
DRSH:加載寄存器�2字節(jié)帶符�(hào)半字�
STRH:存�(chǔ)寄存��2字節(jié)半字�
DRB:加載寄存器,無(wú)符號(hào)字節(jié)�
DRSB:加載寄存器,帶符號(hào)字節(jié)�
STRB:存�(chǔ)寄存�,字節(jié)�
Rm:內(nèi)含偏移量的寄存器,Rm必須在R0~R7范圍�(nèi)�
帶符�(hào)和無(wú)符號(hào)存儲(chǔ)指令�(méi)有區(qū)��
STR指令將Rd中的一�(gè)字、半字或字節(jié)存儲(chǔ)到存�(chǔ)��
DR指令從存�(chǔ)器中將一�(gè)�、半字或字節(jié)加載到Rd�
Rn中的基址加上偏移量形成存�(chǔ)器的地址�
寄存器偏移的半字和字節(jié)加載可以是帶符號(hào)或無(wú)符號(hào)�。數(shù)�(jù)加載到Rd的有效字或字節(jié)。對(duì)于無(wú)符號(hào)加載,Rd的其余位�(bǔ)0;或?qū)τ趲Х?hào)加載,Rd的其余位�(fù)制符�(hào)�。字傳送地址必須可被4整除,半字傳送地址必須可被2整除�
指令示例�
DR R2,[R,R5]
DRSH R0,[R0,R6]
STRB R,[R7,R0]
?�?)DR和STR--PC或SP相對(duì)偏移
加載寄存器和存儲(chǔ)寄存�。用PC或SP中值的立即�(shù)偏移指明存儲(chǔ)器中的地址。沒(méi)有PC相對(duì)偏移的STR指令�
指令格式�
DR Rd,[PC,#immed_8×4]
DR Rd,[abe
DR Rd,[[SP,#immed_8×4]
STR Rd, [SP,#immed_8×4]
其中�
immed_8×4:偏移量。它是一�(gè)表達(dá)�,取值(在匯編時(shí))為4的整�(shù)倍,范圍�0�1020之間�
abe:程序相�(duì)偏移表達(dá)式。abe必須在當(dāng)前指令之后且1KB范圍�(nèi)�
STR:將一�(gè)字存�(chǔ)到存�(chǔ)��
DR:從存儲(chǔ)器中加載一�(gè)��
PC或SP的基址加上偏移量形成存�(chǔ)器地址。PC的位[1]被忽�,這確保了地址是字�(duì)�(zhǔn)的。字或半字傳送的地址必須�4的整�(shù)��
指令示例�
DR R2,[PC,#1016]
DR R5,ocadata
DR R0,[SP,#920]
STR R,[SP,#20]
?�?)PUSH和POP
低寄存器和可選的R�(jìn)棧以及低寄存器和可選的PC出棧�
指令格式�
PUSH {regist}
POP {regist}
PUSH {regist,R}
POP {regist,PC}
其中�
regist:低寄存器的全部或其子集�
括號(hào)是指令格式的一部分,它們不代表指令列表可選。列表中至少�1�(gè)寄存�。Thumb堆棧是滿遞減堆棧,堆棧向下增�(zhǎng),且SP指向堆棧的入口。寄存器以數(shù)字順序存�(chǔ)在堆棧中。數(shù)字的寄存器存�(chǔ)在地址��
POP {regist,PC}這條指令引起處理器轉(zhuǎn)移到從堆棧彈出給PC的地址,這通常是從子程序返回,其中R在子程序�(kāi)頭壓�(jìn)堆棧。這些指令不影響條件碼�(biāo)��
指令示例�
PUSH {R0,R3,R5}
PUSH {R1,R4-R7}
PUSH {R0,R}
POP {R2,R5}
POP {R0-R7,PC}
�5)DMIA和STMIA
加載和存�(chǔ)多�(gè)寄存��
指令格式�
op Rn!,{regist}
其中,op為DMIA或STMIA�
regist為低寄存器或低寄存器范圍�、用逗號(hào)隔開(kāi)的列�。括�(hào)是指令格式的一部分,它們不代表指令列表可選,列表中至少�(yīng)�1�(gè)寄存�。寄存器以數(shù)字順序加載或存儲(chǔ),數(shù)字的寄存器在Rn的初始地址��
Rn的值以regist中寄存器�(gè)�(shù)�4 倍增�。若Rn在寄存器列表中,則:
�(duì)于DMIA指令,Rn的最終值是加載的�,不是增加后的地址�
�(duì)于STMIA指令,Rn存儲(chǔ)的值有兩種情況:若Rn是寄存器列表中數(shù)字的寄存�,則Rn存儲(chǔ)的值為Rn的初�;其他情況則不可�(yù)知,�(dāng)�,regist中不包括Rn�
指令示例�
DMIA R3!,{R0,R4}
DMIA R5!,{R0~R7}
STMIA R0!,{R6,R7}
STMIA R3!,{R3,R5,R7}
2. �(shù)�(jù)處理指令
?�?)ADD和SUB--低寄存器
加法和減�。對(duì)于低寄存器操作,�2條指令各有如�3種形式:
兩�(gè)寄存器的�(nèi)容相加或相減,結(jié)果放到第3�(gè)寄存器中�
寄存器中的值加上或減去一�(gè)小整�(shù),結(jié)果放到另一�(gè)不同的寄存器��
寄存器中的值加上或減去一�(gè)大整�(shù),結(jié)果放回同一�(gè)寄存器中�
指令格式�
op Rd,Rn,Rm
op Rd,Rn,#expr3
op Rd,#expr8
其中�
op為ADD或SUB�
Rd:目的寄存器。它也用做“op Rd�#expr8”的�1�(gè)操作�(shù)�
Rn:操作數(shù)寄存��
Rm:第二操作數(shù)寄存��
expr3:表�(dá)�,為取值在-7�+7范圍�(nèi)的整�(shù)�3位立即數(shù))�
expr8:表�(dá)�,為取值在-255�+255范圍�(nèi)的整�(shù)�8位立即數(shù)��
“op Rd,Rn,Rm”執(zhí)行Rn+Rm或Rn-Rm操作,結(jié)果放在Rd��
“op Rd,Rn�#expr3”執(zhí)行Rn+expr3或Rn-expr3操作,結(jié)果放在Rd��
“op Rd�#expr8”執(zhí)行Rd+expr8或Rd-expr8操作,結(jié)果放在Rd��
expr3或expr8為負(fù)值的ADD指令匯編成相�(duì)�(yīng)的帶正數(shù)常量的SUB指令。expr3或expr8為負(fù)值的SUB指令匯編成相�(duì)�(yīng)的帶正數(shù)常量的ADD指令�
Rd、Rn和Rm必須是低寄存器(R0~R7��
這些指令更新�(biāo)志N、Z、C和V�
指令示例�
ADD R3,R,R5
SUB R0,R4,#5
ADD R7,#201
�2)ADD--高或低寄存器
將寄存器中值相�,結(jié)果送回到操作數(shù)寄存器�
指令格式�
ADD Rd,Rm
其中�
Rd:目的寄存器,也是操作數(shù)寄存��
Rm:第二操作數(shù)寄存器�
這條指令將Rd和Rm中的值相�,結(jié)果放在Rd中�
�(dāng)Rd和Rm都是低寄存器�(shí),指令“ADD Rd,Rm”匯編成指令“ADD Rd,Rd,Rm�。若Rd和Rm是低寄存器,則更新條件碼�(biāo)志N、Z、C 和V;其他情況下這些�(biāo)志不受影響�
指令示例�
ADD R12,R4
?�?)ADD和SUB--SP
SP加上或減去立即數(shù)常量�
指令格式�
ADD SP�#expr
SUB SP�#expr
其中:expr為表�(dá)�,取值(在匯編時(shí))為�-508�+508范圍�(nèi)�4的整倍數(shù)�
該指令把expr的值加到SP 的值上或用SP的值減去expr的�,結(jié)果放到SP��
expr為負(fù)值的ADD指令匯編成相�(duì)�(yīng)的帶正數(shù)常量的SUB指令。expr為負(fù)值的SUB指令匯編成相�(duì)�(yīng)的帶正數(shù)常量的ADD指令�
這條指令不影響條件碼�(biāo)��
指令示例�
ADD SP,#32
SUB SP,#96
?�?)ADD--PC或SP相對(duì)偏移
SP或PC值加一立即�(shù)常量,結(jié)果放入低寄存��
指令格式�
ADD Rd,Rp�#expr
其中�
Rd:目的寄存器。Rd必須在R0~R7范圍�(nèi)�
Rp:SP 或PC�
expr:表�(dá)�,取值(匯編�(shí))為�0�1020范圍�(nèi)�4的整倍數(shù)�
這條指令把expr加到Rp的值中,結(jié)果放入Rd�
若Rp是PC,則使用值是(當(dāng)前指令地址+4)AND &FFFFFFC,即忽略地址的低2位�
這條指令不影響條件碼�(biāo)��
指令示例�
ADD R6,SP,#64
ADD R2,PC,#980
?�?)ADC、SBC和MU
帶�(jìn)位的加法、帶�(jìn)位的減法和乘法�
指令格式�
op Rd,Rm
其中�
op為ADC、SBC或MU�
Rd:目的寄存器,也是操作數(shù)寄存��
Rm:第二操作數(shù)寄存�,Rd、Rm必須是低寄存��
ADC 將帶�(jìn)位標(biāo)志的Rd和Rm的值相�,結(jié)果放在Rd�,用這條指令可組合成多字加法�
SBC考慮�(jìn)位標(biāo)�,從Rd值中減去Rm的值,�(jié)果放入Rd�,用這條指令可組合成多字減法�
MU�(jìn)行Rd和Rm值的乘法,結(jié)果放入Rd ��
Rd和Rm必須是低寄存器(R0~R7)�
ADC和SBC更新�(biāo)志N、Z、C和V。MU更新�(biāo)志N和Z�
在ARMv4及以前版本中,MU�(huì)使標(biāo)志C和V不可�。在ARMv5及以后版本中,MU不影響標(biāo)志C和V�
指令示例�
ADC R2,R4
SBC R0,R1
MU R7,R6
?�?)按位邏輯操作AND、ORR、EOR和BIC
指令格式�
op Rd,Rm
其中�
op為AND、ORR、EOR或BIC�
Rd:目的寄存器,它也包含操作數(shù),Rd必須在R0~R7范圍�(nèi)�
Rm:第二操作數(shù)寄存�,Rm 必須在R0~R7范圍�(nèi)�
這些指令用于�(duì)Rd和Rm中的值�(jìn)行按位邏輯操作,�(jié)果放在Rd �,操作如下:
AND:�(jìn)行邏輯“與”操��
ORR:�(jìn)行邏輯“或”操��
EOR:�(jìn)行邏輯“異或”操��
BIC:�(jìn)行“Rd AND NOT Rm”操��
這些指令根據(jù)�(jié)果更新標(biāo)志N和Z�
程序示例�
AND R1,R2
ORR R0,R1
EOR R5,R6
BIC R7,R6
?�?)移位和循環(huán)移位操作ASR、S、SR和ROR
Thumb指令集中,移位和循環(huán)移位操作作為�(dú)立的指令使用,這些指令可使用寄存器中的值或立即�(shù)移位��
指令格式�
op Rd,Rs
op Rd,Rm,#expr
其中�
op是下列其中之一�
ASR:算�(shù)右移,將寄存器中的內(nèi)容看做補(bǔ)碼形式的帶符�(hào)整數(shù)。將符號(hào)位復(fù)制到空出��
S:邏輯左移,空出位填��
SR:邏輯右移,空出位填��
ROR:循�(huán)右移,將寄存器右端移出的位循�(huán)移回到左�。ROR僅能與寄存器控制的移位一起使��
Rd:目的寄存器,它也是寄存器控制移位的源寄存器。Rd必須在R0~R7范圍�(nèi)�
Rs:包含移位量的寄存器,Rs必須在R0~R7范圍�(nèi)�
Rm:立即數(shù)移位的源寄存�,Rm必須在R0~R7范圍�(nèi)�
expr:立即數(shù)移位�,它是一�(gè)取值(在匯編時(shí))為整數(shù)的表�(dá)式。整�(shù)的范圍為:若op是S,則�0�31;其他情況則�1�32�
�(duì)于除ROR以外的所有指令:
若移位量�32,則Rd清零,移出的位保留在�(biāo)志C��
若移位量大于32,則Rd和標(biāo)志C均被清零�
這些指令根據(jù)�(jié)果更新標(biāo)志N和Z,且不影響標(biāo)志V。對(duì)于標(biāo)志C,若移位量是�,則不受影響。其他情況下,它包含源寄存器的移出位�
指令示例�
ASR R3,R5
SR R0,R2,#16??;將R2的內(nèi)容邏輯右�16次后,結(jié)果放入R0�
SR R5,R5,av
?�?)比較指令CMP 和CMN
指令格式�
CMP Rn,#expr
CMP Rn,Rm
CMN Rn,Rm
其中�
Rn:操作數(shù)寄存器�
expr:表�(dá)�,其值(在匯編時(shí))為�0�255 范圍�(nèi)的整�(shù)�
Rm:第二操作數(shù)寄存��
CMP指令從Rn的值中減去expr或Rm的值,CMN指令將Rm和Rn的值相�,這些指令根據(jù)�(jié)果更新標(biāo)志N、Z、C和V,但不往寄存器中存放�(jié)��
�(duì)于“CMP Rn�#expr”和CMN指令,Rn和Rm必須在R0~R7范圍�(nèi)�
�(duì)于“CMP Rn,Rm”指�,Rn和Rm可以是R0~R15中的任何寄存��
指令示例�
CMP R2,#255
CMP R7,R12
CMN R,R5
?�?)傳�、傳送非和取�(fù)(MOV、MVN和NEG�
指令格式�
MOV Rd,#expr
MOV Rd,Rm
MVN Rd,Rm
NEG Rd,Rm
其中�
Rd:目的寄存器�
expr:表�(dá)式,其取值為�0�255范圍�(nèi)的整�(shù)�
Rm:源寄存器�
MOV指令�#expr或Rm的值放入Rd。MVN指令從Rm中取�,然后對(duì)該值�(jìn)行按位邏輯“非”操�,結(jié)果放入Rd。NEG指令取Rm的值再乘以-1,結(jié)果放入Rd�
�(duì)于“MOV Rd�#expr�、MVN和NEG指令,Rd和Rm必須在R0~R7范圍�(nèi)�
�(duì)于“MOV Rd,Rm”指�,Rd和Rm可以是寄存器R0~R15中的任意一�(gè)�
“MOV Rd�#expr”和MVN 指令更新�(biāo)志N和Z,對(duì)�(biāo)志C或V�(wú)影響。NEG指令更新�(biāo)志N、Z、C 和V?!癕OV Rd,Rm”指令中,若Rd或Rm是高寄存器(R8~R18),則標(biāo)志不受影�;若Rd 和Rm 都是低寄存器(R0~R7�,則更新�(biāo)志N和Z,且清除�(biāo)志C和V�
指令示例�
MOV R3,#0
MOV R0,R12
MVN R7,R1
NEG R2,R2
�10)測(cè)試位TST
指令格式�
TST Rn,Rm
其中�
Rn:操作數(shù)寄存��
Rm:第二操作數(shù)寄存器�
TST�(duì)Rm和Rn中的值�(jìn)行按位“與”操�。但不把�(jié)果放入寄存器。該指令根據(jù)�(jié)果更新標(biāo)志N和Z,標(biāo)志C和V不受影響。Rn和Rm必須在R0~R7范圍�(nèi)�
指令示例�
TST R2,R4
3. 分支指令
�1)分支B指令
這是Thumb指令集中的有條件指令�
指令格式�
B{cond} abe
其中,abe是程序相�(duì)偏移表達(dá)式,通常是在同一代碼塊內(nèi)的標(biāo)�(hào)。若使用cond,則abe必須在當(dāng)前指令的�256�+256字節(jié)范圍�(nèi)。若指令是無(wú)條件�,則abe必須在�2KB范圍�(nèi)。若cond滿足或不使用cond,則B指令引起處理器轉(zhuǎn)移到abe�
abe必須在指定限制內(nèi)。ARM鏈接器不能增加代碼來(lái)�(chǎn)生更�(zhǎng)的轉(zhuǎn)移�
指令示例�
B doop
BEG sectB
?�?)帶鏈接的長(zhǎng)分支B指令
指令格式�
B abe
其中�1abe為程序相�(duì)�(zhuǎn)移表�(dá)�。B指令將下一條指令的地址�(fù)制到R14(鏈接寄存器),并引起處理器�(zhuǎn)移到1abe�
B指令不能�(zhuǎn)移到�(dāng)前指令�4MB以外的地址。必要時(shí),ARM鏈接器插入代碼以允許更長(zhǎng)的轉(zhuǎn)��
指令示例�
B extract
�3)分�,并可選地切換指令集BX
指令格式�
BX Rm
其中,Rm裝有分支目的地址的ARM寄存�。Rm的位[0]不用于地址部分。若Rm 的位[0]清零,則位[1]也必須清�,指令清除CPSR中的�(biāo)志T,目的地址的代碼被解釋為ARM代碼,BX指令引起處理器轉(zhuǎn)移到Rm存儲(chǔ)的地址。若Rm的位[0]置位,則指令集切換到Thumb狀�(tài)�
指令示例�
BX R5
�4)帶鏈接分支,并可選地交換指令集BX
指令格式�
BX Rm
BX abe
其中,Rm 裝有分支目的地址的ARM寄存�。Rm的位[0]不用于地址部分。若Rm 的位[0]清零,則位[1]必須也清�,指令清除CPSR中的�(biāo)志T,目的地址的代碼被解釋為ARM代碼。abe為程序相�(duì)偏移表達(dá)式,“BX abe”始終引起處理器切換到ARM狀�(tài)�
BX指令可用于:
�(fù)制下一條指令的地址到R14�
引起處理器轉(zhuǎn)移到abe或Rm存儲(chǔ)的地址�
如果Rm的位[0]清零,或使用“BX abe”形�,則指令集切換到ARM狀�(tài)�
指令不能�(zhuǎn)移到�(dāng)前指令�4Mb范圍以外的地址。必要時(shí),ARM鏈接器插入代碼以允許更長(zhǎng)的轉(zhuǎn)��
指令示例�
BX R6
BX armsub
4. 中斷和斷�(diǎn)指令
?�?)軟件中斷SWI指令
指令格式�
SWI immed_8
其中,immed_8為數(shù)字表�(dá)式,其取值為0�255范圍�(nèi)的整�(shù)�
SWI指令引起SWI異常。這意味著處理器狀�(tài)切換到ARM�(tài);處理器模式切換到管理模�,CPSR保存到管理模式的SPSR中,�(zhí)行轉(zhuǎn)移到SWI向量地址。處理器忽略immed_8,但immed_8出現(xiàn)在指令操作碼的位[7�0]�,而異常處理程序用它來(lái)確定正在�(qǐng)求何種服�(wù),這條指令不影響條件碼�(biāo)��
指令示例�
SWI 12
�2)斷�(diǎn)BKPT指令
指令格式�
BKPT immed_8
其中,immed_8為數(shù)字表�(dá)式,取值為0�255范圍�(nèi)的整�(shù)�
BKPT指令引起處理器�(jìn)入調(diào)試模�。調(diào)試工具利用這一�(diǎn)�(lái)�(diào)查到�(dá)特定地址的指令時(shí)的系�(tǒng)狀�(tài)。盡管immed_8出現(xiàn)在指令操作碼的位[7:0]�,處理器忽略immed_8。調(diào)試器用它�(lái)保存有關(guān)斷點(diǎn)的附加信��
指令示例�
BKPT 67
1、Thumb指令繼承了ARM指令集的許多特點(diǎn)
Thumb指令也是采用Load/Store�(jié)�(gòu),有�(shù)�(jù)處理、數(shù)�(jù)傳送及流控制指令等�
2、Thumb指令集丟棄了ARM指令集一些特�
大多�(shù)Thumb指令是無(wú)條件�(zhí)行的(除了轉(zhuǎn)移指令B�,而所有ARM指令都是條件�(zhí)行的。許多Thumb�(shù)�(jù)處理指令采用2地址格式,即目的寄存器與一�(gè)源寄存器相同,而大多數(shù)ARM�(shù)�(jù)處理指令采用的是3地址格式(除�64位乘法指令外��
3、Thumb異常�(shí)表現(xiàn)的一些特�(diǎn)
所有異常都�(huì)使微處理器返回到ARM模式狀�(tài),并在ARM的編程模式中處理。由于ARM微處理器字傳送地址必須可被4整除(即字對(duì)�(zhǔn)�,半字傳送地址必須可被2整除(即半字�(duì)�(zhǔn)�。而Thumb指令�2�(gè)字節(jié)�(zhǎng),而不�4�(gè)字節(jié),所�,由Thumb�(zhí)行狀�(tài)�(jìn)入異常時(shí)其自然偏移與ARM不同�
1、在任何�(shí)�,CPSR的第5位(位T)決定了ARM微處理器�(zhí)行的是ARM指令流還是Thumb指令流。當(dāng)T�1,則�(rèn)為是16位的Thumb指令�;當(dāng)T�0,則�(rèn)為是32位的ARM指令��
2、�(jìn)入Thumb模式
3、�(jìn)入Thumb指令模式有兩種方法:一種是�(zhí)行一條交換轉(zhuǎn)移指令BX,另一種方法是利用異常返回,也可以把微處理器從ARM模式�(zhuǎn)換為Thumb模式�
4� 退出Thumb模式
退出Thumb指令模式也有兩種方法:一種是�(zhí)行Thumb指令中的交換�(zhuǎn)移BX指令可以顯式的返回到ARM指令�。另一種是利用異常�(jìn)入ARM指令� �
Thumb�(shù)�(jù)處理指令包括一組高度優(yōu)化且相當(dāng)�(fù)雜的指令,范圍涵蓋編譯器通常需要的大多�(shù)操作。ARM指令支持在單條指令中完成一�(gè)操作�(shù)的移位及一�(gè)ALU操作,但Thumb指令集將移位操作和ALU操作分離為不同的指令。本部分從以下幾�(gè)方面介紹� �(shù)�(jù)處理指令的二�(jìn)制編� �(shù)�(jù)處理指令的分� ARM指令與Thumb指令比較 �(shù)�(jù)處理指令的二�(jìn)制編碼如下圖�
按照�(shù)�(jù)處理指令的功�,可以將其分為以下幾類:
ADD與SUB—低寄存器加法和減法
ADD—高或低寄存�
ADD與SUB—SP
ADD—PC或SP相對(duì)偏移
ADC,SBC和MUL
ARM指令與Thumb指令低寄存器比較�
ARM指令與Thumb指令高寄存器比較�