
ARM處理器當(dāng)前有6個(gè)產(chǎn)品系列:ARM7、ARM9、ARM9E、ARM10E、ARM11和SecurCore,其中ARM11為最近推出的產(chǎn)品。進(jìn)一步的產(chǎn)品來(lái)自于合作伙伴,例如Intel Xscale ARM7、ARM9、ARM9E、ARM10E是4個(gè)通用處理器系列。每個(gè)系列提供一套特定的性能來(lái)滿(mǎn)足設(shè)計(jì)者對(duì)功耗、性能、體積的需求。
表1.3顯示了ARM7、ARM9、ARM10及ARM11內(nèi)核之間屬性的比較。有些屬性依賴(lài)于生產(chǎn)過(guò)程和工藝,具體芯片需參閱其芯片手冊(cè)。
ARM7系列處理器主要應(yīng)用于下面一些場(chǎng)合:個(gè)人音頻設(shè)備(MP3播放器、WMA播放器、AAC播放器); 接入級(jí)的無(wú)線(xiàn)設(shè)備;噴墨打印機(jī);數(shù)碼照相機(jī)
Load/Store內(nèi)存訪(fǎng)問(wèn)指令在ARM寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)。ARM指令中有3種基本的數(shù)據(jù)傳送指令。
異常或中斷是用戶(hù)程序中最基本的一種執(zhí)行流程和形態(tài)。這部分主要對(duì)ARM架構(gòu)下的異常中斷做詳細(xì)說(shuō)明。
ARM采用的是32位架構(gòu),ARM的基本數(shù)據(jù)類(lèi)型有以下3種。 Byte:字節(jié),8bit。Halfword:半字,16bit。 Word:字,32bit。
大多數(shù)的用戶(hù)程序運(yùn)行在用戶(hù)模式下。當(dāng)處理器工作在用戶(hù)模式時(shí),應(yīng)用程序不能夠訪(fǎng)問(wèn)受操作系統(tǒng)保護(hù)的一些系統(tǒng)資源,應(yīng)用程序也不能直接進(jìn)行處理器模式切換。當(dāng)需要進(jìn)行處理器模式切換時(shí),應(yīng)用程序可以產(chǎn)生異常處理,在異常處理過(guò)程中進(jìn)行處理器模式切換。這種體系結(jié)構(gòu)可以使操作系統(tǒng)控制整個(gè)系統(tǒng)資源的使用。
ARM處理器共有7種不同的處理器模式,在每一種處理器模式中有一組相應(yīng)的寄存器組。表3.2顯示了ARM的寄存器組織概要。
多寄存器Load/Store內(nèi)存訪(fǎng)問(wèn)指令也叫批量加載/存儲(chǔ)指令,它可以實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳送數(shù)據(jù)。LDM用于加載多個(gè)寄存器,STM用于存儲(chǔ)多個(gè)寄存器。多寄存器Load/Store內(nèi)存訪(fǎng)問(wèn)指令允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。
MOV指令是最簡(jiǎn)單的ARM指令,執(zhí)行的結(jié)果就是把一個(gè)數(shù)N送到目標(biāo)寄存器Rd,其中N可以是寄存器,也可以是立即數(shù)。
MVN是反相傳送(Move Negative)指令。它將操作數(shù)的反碼傳送到目的寄存器。MVN指令多用于向寄存器傳送一個(gè)負(fù)數(shù)或生成位掩碼。
交換指令是load/store指令的一種特例,它把一個(gè)寄存器單元的內(nèi)容與寄存器內(nèi)容交換。交換指令是一個(gè)原子操作(atomic operation),也就是說(shuō),在連續(xù)的總線(xiàn)操作中讀/寫(xiě)一個(gè)存儲(chǔ)單元,在操作期間阻止其他任何指令對(duì)該存儲(chǔ)單元的讀/寫(xiě)。
ARM指令集提供了兩條指令,可直接控制程序狀態(tài)寄存器(PSR,Program State Register)。MRS指令用于把CPSR或SPSR的值傳送到一個(gè)寄存器;MSR與之相反,把一個(gè)寄存器的內(nèi)容傳送到CPSR或SPSR。這兩條指令結(jié)合,可用于對(duì)CPSR和SPSR進(jìn)行讀/寫(xiě)操作。
邏輯異或EOR(Exclusive OR)指令將寄存器中的值和的值執(zhí)行按位“異或”操作,并將執(zhí)行結(jié)果存儲(chǔ)到目的寄存器中,同時(shí)根據(jù)指令的執(zhí)行結(jié)果更新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í)行。