
SUB(Subtract)減操作指令,從寄存器中減去表示的數(shù)值,并將結(jié)果保存到目標(biāo)寄存器中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。
RSB(Reverse Subtract)減操作指令,從寄存器中減去表示的數(shù)值,并將結(jié)果保存到目標(biāo)寄存器中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。
ADD加操作指令,將寄存器的值加上表示的數(shù)值,并將結(jié)果保存到目標(biāo)寄存器中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。
ADC加操作指令,將寄存器的值加上表示的數(shù)值,再加上CPSR中的C條件標(biāo)志位的值,將結(jié)果保存到目標(biāo)寄存器中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。
SBC(Subtract with Carry)帶進(jìn)位的減操作指令,用于執(zhí)行操作數(shù)大于32位時(shí)的減法操作。該指令從寄存器中減去表示的數(shù)值,再減去寄存器CPSR中C條件標(biāo)志位的反碼(NOT(Carry flag))。并將結(jié)果保存到目標(biāo)寄存器中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。
RSC(Reverse Subtract with Carry)帶進(jìn)位的翻轉(zhuǎn)減操作指令,從寄存器中減去表示的數(shù)值,再減去寄存器CPSR中C條件標(biāo)志位的反碼(NOT(Carry Flag)),并將結(jié)果保存到目標(biāo)寄存器中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。
RSC(Reverse Subtract with Carry)帶進(jìn)位的翻轉(zhuǎn)減操作指令,從寄存器中減去表示的數(shù)值,再減去寄存器CPSR中C條件標(biāo)志位的反碼(NOT(Carry Flag)),并將結(jié)果保存到目標(biāo)寄存器中,并根據(jù)指令的執(zhí)行結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志位。
TEQ(Test Equivalence)測(cè)試指令用于將一個(gè)寄存器的值和一個(gè)算術(shù)值做比較。條件標(biāo)志位根據(jù)兩個(gè)操作數(shù)做“邏輯或”后的結(jié)果設(shè)置。以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。
CMP(Compare)比較指令使用寄存器Rn的值減去operand2的值,根據(jù)操作的結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。
CMN(Compare Negative)比較指令使用寄存器Rn的值減去operand2的負(fù)數(shù)值(加上operand2),根據(jù)操作的結(jié)果更新CPSR中相應(yīng)的條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。
ORR(Logical OR)為邏輯或操作指令,將第二個(gè)源操作數(shù)的值與寄存器Rn的值按位做邏輯或操作,結(jié)果保存到Rd中。
BIC(Bit Clear)位清零指令,將寄存器Rn的值與第二源操作數(shù)的值的反碼按位做“邏輯與”操作,結(jié)果保存到Rd中。
MLA(Multiply Accumulate)32位乘累加指令將Rm和Rs中的值相乘,再將乘積加上第3個(gè)操作數(shù),結(jié)果的最低32位保存到Rd中。
UMULL(Unsigned Multiply Long)為64位無(wú)符號(hào)乘法指令。指令將Rm和Rs中的值做無(wú)符號(hào)數(shù)相乘,結(jié)果的低32位保存到RsLo中,而高32位保存到RdHi中。
MLA(Multiply Accumulate)32位乘累加指令將Rm和Rs中的值相乘,再將乘積加上第3個(gè)操作數(shù),結(jié)果的最低32位保存到Rd中。
UMLAL(Unsigned Multiply Accumulate Long)為64位無(wú)符號(hào)長(zhǎng)乘-累加指令。指令將Rm和Rs中的值做無(wú)符號(hào)數(shù)相乘,64位乘積與RdHi,RdLo相加,結(jié)果的低32位保存到RsLo中,而高32位保存到RdHi中。
SMULL(Signed Multiply Long)64位有符號(hào)長(zhǎng)乘法指令。指令將Rm和Rs中的值做有符號(hào)數(shù)相乘,結(jié)果的低32位保存到RsLo中,而高32位保存到RdHi中。
SMLAL(Signed Multiply Accumulate Long)為64位有符號(hào)長(zhǎng)乘法指令。指令將Rm和Rs中的值做有符號(hào)數(shù)相乘,64位乘積與RdHi,RdLo相加,結(jié)果的低32位保存到RsLo中,而高32位保存到RdHi中。
跳轉(zhuǎn)指令B使程序跳轉(zhuǎn)到指定的地址執(zhí)行程序。帶連接的跳轉(zhuǎn)指令BL將下一條指令的地址拷貝到r14(即返回地址連接寄存器LR)寄存器中,然后跳轉(zhuǎn)到指定地址運(yùn)行程序。需要注意的是,這兩條指令和目標(biāo)地址處的指令都要屬于ARM指令集。兩條指令都可以根據(jù)CPSR中的條件標(biāo)志位的值決定指令是否執(zhí)行。
帶狀態(tài)切換的跳轉(zhuǎn)指令BX使程序跳轉(zhuǎn)到指令中指定的參數(shù)Rm指定的地址執(zhí)行程序,Rm的第0位拷貝到CPSR中T位,位[31∶1]移入PC。若Rm的bit[0]為1,則跳轉(zhuǎn)時(shí)自動(dòng)將CPSR中的標(biāo)志位T置位,即把目標(biāo)地址的代碼解釋為T(mén)humb代碼;若Rm的位bit[0]為0,則跳轉(zhuǎn)時(shí)自動(dòng)將CPSR中的標(biāo)志位T復(fù)位,即把目標(biāo)地址代碼解釋為ARM代碼