(嵌入式系統(tǒng)開(kāi)發(fā))03第三章 ARM指令集ok_第1頁(yè)
(嵌入式系統(tǒng)開(kāi)發(fā))03第三章 ARM指令集ok_第2頁(yè)
(嵌入式系統(tǒng)開(kāi)發(fā))03第三章 ARM指令集ok_第3頁(yè)
(嵌入式系統(tǒng)開(kāi)發(fā))03第三章 ARM指令集ok_第4頁(yè)
(嵌入式系統(tǒng)開(kāi)發(fā))03第三章 ARM指令集ok_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、( (嵌入式系統(tǒng)開(kāi)發(fā)嵌入式系統(tǒng)開(kāi)發(fā))03)03第三章第三章 ARMARM指指令集令集okok3.1 ARM指令集概述指令集概述 ARM指令集是指令集是32位的,程序的啟動(dòng)都是從位的,程序的啟動(dòng)都是從ARM指指令集開(kāi)始。令集開(kāi)始。所有的所有的ARM指令集都可以是指令集都可以是有條件執(zhí)行有條件執(zhí)行的的( (根據(jù)根據(jù)CPSRCPSR中的條件位自動(dòng)判斷是否執(zhí)行指令,在條件中的條件位自動(dòng)判斷是否執(zhí)行指令,在條件滿足時(shí),指令執(zhí)行,否則指令被忽略滿足時(shí),指令執(zhí)行,否則指令被忽略) )。 而而Thumb指令只有指令只有B(跳轉(zhuǎn))指令具有條件執(zhí)行功(跳轉(zhuǎn))指令具有條件執(zhí)行功能。能。 如果指令不標(biāo)明條件代碼,將默

2、認(rèn)為無(wú)條件(如果指令不標(biāo)明條件代碼,將默認(rèn)為無(wú)條件(AL)執(zhí)行。執(zhí)行。條件域表1條件碼條件碼后綴標(biāo) 志含 義0000EQZ置位相等相等0001NEZ清零不相等不相等0010CSC置位無(wú)符號(hào)數(shù)大于或等無(wú)符號(hào)數(shù)大于或等于于0011CCC清零無(wú)符號(hào)數(shù)小于無(wú)符號(hào)數(shù)小于0100MIN置位負(fù)數(shù)負(fù)數(shù)0101PLN清零正數(shù)或零正數(shù)或零0110VSV置位溢出溢出0111VCV清零未溢出未溢出條件域表2條件碼后綴標(biāo) 志含 義1001LSC清零Z置位無(wú)符號(hào)數(shù)小于或無(wú)符號(hào)數(shù)小于或等于等于1010GEN等于V帶符號(hào)數(shù)大于或帶符號(hào)數(shù)大于或等于等于1011LTN不等于V帶符號(hào)數(shù)小于帶符號(hào)數(shù)小于1100GTZ清零且(N等于V

3、)帶符號(hào)數(shù)大于帶符號(hào)數(shù)大于1101LEZ置位或(N不等于V)帶符號(hào)數(shù)小于或帶符號(hào)數(shù)小于或等于等于1110AL忽略無(wú)條件執(zhí)行3.1.3指令分類及指令格式 ARM指令集可以分為六大類指令集可以分為六大類: : 數(shù)據(jù)處理指令、數(shù)據(jù)處理指令、 Load/Store指令指令( (寄存器與存儲(chǔ)器之間的數(shù)據(jù)存取寄存器與存儲(chǔ)器之間的數(shù)據(jù)存取) ) 跳轉(zhuǎn)指令、跳轉(zhuǎn)指令、 程序狀態(tài)寄存器處理指令、程序狀態(tài)寄存器處理指令、 協(xié)處理器指令協(xié)處理器指令 異常產(chǎn)生指令。異常產(chǎn)生指令。FOpcode:操作碼;指令助記符,如操作碼;指令助記符,如LDR、STR等。等。Fcond :可選的條件碼;執(zhí)行條件,如可選的條件碼;執(zhí)行

4、條件,如EQ、NE等等。FS:可選后綴;若指定可選后綴;若指定“S”,則根據(jù)指令執(zhí)行結(jié),則根據(jù)指令執(zhí)行結(jié)果更新果更新CPSR中的條件碼中的條件碼。FRd目標(biāo)寄存器。目標(biāo)寄存器。FRn存放第存放第1操作數(shù)的寄存器。操作數(shù)的寄存器。Foperand2第第2個(gè)操作數(shù)個(gè)操作數(shù)opcodecondS Rd, Rn,operand2 3.2 ARM尋址方式3.2.1 3.2.1 立即尋址立即尋址3.2.2 3.2.2 寄存器尋址寄存器尋址3.2.3 3.2.3 寄存器間接尋址寄存器間接尋址3.2.4 3.2.4 基址加偏址尋址基址加偏址尋址 3.2.5 3.2.5 堆棧尋址堆棧尋址 3.2.6 3.2.6

5、 塊拷貝尋址塊拷貝尋址 3.2.7 3.2.7 相對(duì)尋址相對(duì)尋址 3.2.1 3.2.1 立即尋址立即尋址F操作數(shù)本身就在指令中給出,操作數(shù)本身就在指令中給出, FADDADDR0R0,R0R0,1 1 / /* *R0R0R0R01 1* */ /ADDADDR0R0,R0R0,0 x3f /0 x3f /* *R0R0R0R00 x3f0 x3f* */ /F立即數(shù),要求以立即數(shù),要求以“”為前綴,對(duì)于以十為前綴,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求在六進(jìn)制表示的立即數(shù),還要求在“”后后加上加上“0 x”0 x”。 有效的立即數(shù)是由一個(gè)有效的立即數(shù)是由一個(gè)8 8位的立即數(shù)位的立即數(shù)循環(huán)循環(huán)右

6、移偶數(shù)位右移偶數(shù)位得到。得到。3.2.23.2.2寄存器尋址寄存器尋址利用寄存器中的數(shù)值作為操作數(shù)利用寄存器中的數(shù)值作為操作數(shù), ADD R0ADD R0,R1R1,R2R2/ /* *R0R1R0R1R2R2* */ / ADD R3ADD R3,R2R2,R1R1,LSR #2LSR #2 / /* *R3R3R2 + R1R2 + R1邏輯左移邏輯左移2 2位位* */ /第二操作數(shù)第二操作數(shù)移位位數(shù)移位位數(shù)也可以用寄存器方式給出也可以用寄存器方式給出: : ADD R3ADD R3,R2R2,R1R1,LSRLSR R4R4第二操作數(shù)移位方式第二操作數(shù)移位方式 LSL/ /LSR :邏

7、輯左:邏輯左/ /右移,空出位用右移,空出位用0填充。填充。ASL:算術(shù)左移:算術(shù)左移(同同LSL)。 ASR:算術(shù)右移,算術(shù)移位的對(duì)象是帶符號(hào)數(shù),移位過(guò):算術(shù)右移,算術(shù)移位的對(duì)象是帶符號(hào)數(shù),移位過(guò)程中必須保持操作數(shù)的符號(hào)不變。如果源操作數(shù)程中必須保持操作數(shù)的符號(hào)不變。如果源操作數(shù)是正數(shù),空出的最高有效位用是正數(shù),空出的最高有效位用0填充,如果是負(fù)填充,如果是負(fù)數(shù)用數(shù)用1填充。填充。 ROR:循環(huán)右移,移出的最低有效位依次填到空出的:循環(huán)右移,移出的最低有效位依次填到空出的最高有效位。最高有效位。RRX:帶進(jìn)位的循環(huán)右移。:帶進(jìn)位的循環(huán)右移。3.2.33.2.3寄存器間接尋址寄存器間接尋址 以

8、寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中。在存儲(chǔ)器中。 LDRLDR R0R0,R1R1/ /* *R0R1R0R1* */ / STR STR R0R0,R1R1/ /* *R1R0R1R0* */ / ARM處理器是典型的處理器是典型的RISC處理器,處理器,對(duì)存儲(chǔ)器的訪問(wèn)只對(duì)存儲(chǔ)器的訪問(wèn)只能使用能使用load和和store實(shí)現(xiàn)實(shí)現(xiàn)。ARM處理器程序空間、處理器程序空間、RAM空間及空間及I/O映射空間統(tǒng)一編址,除對(duì)映射空間統(tǒng)一編址,除對(duì)RAM操操作以外,對(duì)外圍作以外,對(duì)外圍I/O、程序數(shù)據(jù)的訪問(wèn)均要通過(guò)加、程序數(shù)據(jù)的訪問(wèn)均要

9、通過(guò)加載載/存儲(chǔ)指令進(jìn)行。存儲(chǔ)指令進(jìn)行。3.2.43.2.4基址加偏址尋址基址加偏址尋址 將將基址寄存器的內(nèi)容與地址偏移量相加,得到操作基址寄存器的內(nèi)容與地址偏移量相加,得到操作數(shù)的有效地址。變址尋址方式的指令有以下幾種形式:數(shù)的有效地址。變址尋址方式的指令有以下幾種形式:前變址模式前變址模式: LDR R0LDR R0,R1R1,44 ;R0R0R1R144自動(dòng)變址模式自動(dòng)變址模式: LDR R0LDR R0,R1R1,44??;R0R1R0R144、 R1R1R1R14 4后變址模式:后變址模式: LDR R0LDR R0,R1R1,4 4;R0R1R0R1、 R1R1R1R14 4基址寄存

10、器的地址偏移可以是一個(gè)立即數(shù),也可基址寄存器的地址偏移可以是一個(gè)立即數(shù),也可以是另一個(gè)寄存器,并且在加到基址寄存器前還可以經(jīng)以是另一個(gè)寄存器,并且在加到基址寄存器前還可以經(jīng)過(guò)移位操作,如下所示:過(guò)移位操作,如下所示:LDR R0,R1,R2 ; R0R1+R2LDR R0,R1,R2,LSL #2 ;R0R1+R2*4但常用的是立即數(shù)偏移的形式,地址偏移為寄存但常用的是立即數(shù)偏移的形式,地址偏移為寄存器形式的指令很少使用。器形式的指令很少使用。3.2.53.2.5堆棧尋址堆棧尋址F當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時(shí),當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時(shí),稱為稱為滿堆棧滿堆棧(Full Stack

11、),而當(dāng)堆棧指),而當(dāng)堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置時(shí),針指向下一個(gè)將要放入數(shù)據(jù)的空位置時(shí),稱為稱為空堆棧空堆棧(Empty Stack)。F訪問(wèn)存儲(chǔ)器時(shí),存儲(chǔ)器的地址向高地址方訪問(wèn)存儲(chǔ)器時(shí),存儲(chǔ)器的地址向高地址方向生長(zhǎng),稱為向生長(zhǎng),稱為遞增堆棧遞增堆棧(ascending stack)。)。 存儲(chǔ)器的地址向低地址方向生存儲(chǔ)器的地址向低地址方向生長(zhǎng),稱為長(zhǎng),稱為遞減堆棧遞減堆棧(descending stack)。)。 棧底棧頂棧區(qū)SP堆棧存儲(chǔ)區(qū)棧頂棧底棧區(qū)SP向下增長(zhǎng)向上增長(zhǎng)0 x123456780 x12345678堆棧壓棧堆棧壓棧堆棧壓棧堆棧壓棧遞增堆棧遞增堆棧遞減堆棧遞減堆棧低

12、地址低地址高地址高地址棧頂SP棧頂SP棧底棧底 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧滿堆棧;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧空堆棧。 0 x123456780 x12345678棧頂SP0 x12345678棧頂SP壓棧壓棧滿堆棧滿堆??斩褩?斩褩_f增堆棧遞增堆棧四種類型的堆棧工作方式四種類型的堆棧工作方式 F滿遞增堆棧:滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。且由低地址向高地址生成。指令指令LDMFALDMFA、STMFASTMFA; F滿遞減堆棧滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),:堆棧指針指向最后壓入的

13、數(shù)據(jù),且由高地址向低地址生成。且由高地址向低地址生成。指令指令LDMFDLDMFD、STMFDSTMFD;F空遞增堆??者f增堆棧:堆棧指針指向下一個(gè)將要放入數(shù):堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成。據(jù)的空位置,且由低地址向高地址生成。指令指令LDMEALDMEA、STMEASTMEA;F空遞減堆棧:空遞減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成據(jù)的空位置,且由高地址向低地址生成, ,指令指令LDMEDLDMED、STMEDSTMED。 3.2.63.2.6塊拷貝尋址塊拷貝尋址LDM/STM指令把存儲(chǔ)器中的一個(gè)數(shù)據(jù)

14、塊加載到多個(gè)寄存指令把存儲(chǔ)器中的一個(gè)數(shù)據(jù)塊加載到多個(gè)寄存器中器中; ;也可以把多個(gè)寄存器中的內(nèi)容保存到存儲(chǔ)器中。尋也可以把多個(gè)寄存器中的內(nèi)容保存到存儲(chǔ)器中。尋址操作中的寄存器可以是址操作中的寄存器可以是R0-R15這這16個(gè)寄存器的子集或個(gè)寄存器的子集或是所有寄存器。是所有寄存器。STMIA R0!, R1-R7; 將將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中。的數(shù)據(jù)保存到存儲(chǔ)器中。 ;存儲(chǔ)指針在保存一個(gè)值存儲(chǔ)指針在保存一個(gè)值之后之后增加,增加, ;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。STMIB R0!, R1-R7 ;將將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中。的數(shù)據(jù)保存到存儲(chǔ)器中。 ;存儲(chǔ)指針在保存一個(gè)值存

15、儲(chǔ)指針在保存一個(gè)值之前之前增加,增加, ;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。 LDM/STMLDM/STM指令依據(jù)其后綴名的不同其尋址的方式也不同指令依據(jù)其后綴名的不同其尋址的方式也不同。模式模式說(shuō)明說(shuō)明模式模式說(shuō)明說(shuō)明IA每次傳送后地址加每次傳送后地址加4FD滿遞減堆棧滿遞減堆棧IB每次傳送前地址加每次傳送前地址加4ED空遞減堆??者f減堆棧DA每次傳送后地址減每次傳送后地址減4FA滿遞增堆棧滿遞增堆棧DB每次傳送前地址減每次傳送前地址減4EA空遞增堆??者f增堆棧數(shù)據(jù)塊傳送操作數(shù)據(jù)塊傳送操作堆棧操作堆棧操作 寄存器加載寄存器加載/存儲(chǔ)指令的存儲(chǔ)指令的8種模式如下表所示,右邊種模式如下表所

16、示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作.3.2.73.2.7相對(duì)尋址相對(duì)尋址 與基址變址尋址方式相類似,相對(duì)尋址以程序計(jì)數(shù)與基址變址尋址方式相類似,相對(duì)尋址以程序計(jì)數(shù)器器PCPC的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量. 以下程序段完成以下程序段完成子程序的調(diào)用和返回子程序的調(diào)用和返回,跳轉(zhuǎn)指令,跳轉(zhuǎn)指令BLBL采采用了相對(duì)尋址方式:用了相對(duì)尋址方式:BLsubr;跳轉(zhuǎn)到子程序;跳轉(zhuǎn)到子程序subrsubr處執(zhí)行處執(zhí)行 subrsubr:MOVMOVPCPC,LRLR;從子程序返回;從子程序返回 簡(jiǎn)單

17、的簡(jiǎn)單的ARM程序程序;文件名:文件名:TEST1.S ;功能:實(shí)現(xiàn)兩個(gè)寄存器相加功能:實(shí)現(xiàn)兩個(gè)寄存器相加AREAExample1,CODE,READONLY ;聲明代碼段聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口標(biāo)識(shí)程序入口 .CODE32 ;聲明聲明32位位ARM指令指令START: MOV R0,#0 ;設(shè)置參數(shù)設(shè)置參數(shù) MOV R1,#10LOOP: BLADD_SUB ;調(diào)用子程序調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到跳轉(zhuǎn)到LOOPADD_SUB: ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回子程序返回 END ;文件結(jié)束文

18、件結(jié)束 使用“;”進(jìn)行注釋標(biāo)號(hào)頂格寫實(shí)際代碼段聲明文件結(jié)束3.3.1 3.3.1 數(shù)據(jù)處理指令數(shù)據(jù)處理指令(操作數(shù)為(操作數(shù)為3232位)位)3.3 數(shù)據(jù)處理指令可分為以下六類:數(shù)據(jù)處理指令可分為以下六類: 數(shù)據(jù)傳送指令;數(shù)據(jù)傳送指令; 算術(shù)運(yùn)算指令;算術(shù)運(yùn)算指令; 邏輯運(yùn)算指令;邏輯運(yùn)算指令; 比較指令;比較指令; 測(cè)試指令;測(cè)試指令; 乘法指令。乘法指令。操作碼24:21助記符助記符意義意義效果0000AND邏輯位與邏輯位與Rd = Rn AND Op20001EOR邏輯位異或邏輯位異或Rd = Rn EOR Op20010SUB減減Rd = Rn - Op20011RSB反向減反向減Rd

19、 = Op2 Rn0100ADD加加Rd = Rn + Op20101ADC帶進(jìn)位加帶進(jìn)位加Rd = Rn + Op2 + C0110SBC帶進(jìn)位減帶進(jìn)位減Rd = Rn - Op2 + C -10111RSC反向帶進(jìn)位減反向帶進(jìn)位減Rd = Op2 - Rn + C -11000TST測(cè)試測(cè)試根據(jù)根據(jù)Rn AND Op2Rn AND Op2設(shè)置條件碼設(shè)置條件碼1001TEQ測(cè)試相等測(cè)試相等根據(jù)根據(jù)Rn EOR Op2Rn EOR Op2設(shè)置條件設(shè)置條件1010CMP比較比較根據(jù)根據(jù)Rn - Op2設(shè)置條件碼設(shè)置條件碼1011CMN負(fù)數(shù)比較負(fù)數(shù)比較根據(jù)根據(jù)Rn + Op2設(shè)置條件碼設(shè)置條件碼1

20、100ORR邏輯位或邏輯位或Rd = Rn OR Op21101MOV傳送傳送Rd = Op21110BIC位清零位清零Rd = Rn AND NOT Op21111MVN求反傳送求反傳送Rd = NOT Op2助記符后助記符后加加S,結(jié),結(jié)果才影響果才影響標(biāo)志位。標(biāo)志位。沒(méi)有沒(méi)有Rd,影響標(biāo)志影響標(biāo)志(不加不加S)數(shù)據(jù)處理指令數(shù)據(jù)處理指令乘法指令(表乘法指令(表3-4)ARM7TDMI具有三種乘法指令,分別為:具有三種乘法指令,分別為:3232位乘法指令;位乘法指令;32 32位乘位乘加加指令;指令;32 32位結(jié)果為位結(jié)果為64位的乘位的乘/乘乘加加指令。指令。64位有符號(hào)乘加指令SMLA

21、L11164位有符號(hào)乘法指令SMULL11064位無(wú)符號(hào)乘加指令UMLAL10164位無(wú)符號(hào)乘法指令UMULL10032位乘加指令MLA00132位乘法指令MUL000說(shuō)明指令助記符操作碼opcode操作碼功能表3.3.2 Load/Store指令 ARM的數(shù)據(jù)存取指令的數(shù)據(jù)存取指令Load/Store是唯一用于寄是唯一用于寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳送的指令存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳送的指令。ARMARM指令集中有三種基本的數(shù)據(jù)存取指令:指令集中有三種基本的數(shù)據(jù)存取指令: 單寄存器的存取指令(單寄存器的存取指令(LDR,STR) 多寄存器存取指令(多寄存器存取指令(LDM,STM) 單寄存器

22、交換指令(單寄存器交換指令(SWP) 單寄存器的存取指令單寄存器的存取指令 單個(gè)寄存器存取指令又可以分為以下兩類:?jiǎn)蝹€(gè)寄存器存取指令又可以分為以下兩類:1. 1. 單字和無(wú)符號(hào)字節(jié)的數(shù)據(jù)傳送指令單字和無(wú)符號(hào)字節(jié)的數(shù)據(jù)傳送指令2. 2. 半字和有符號(hào)字節(jié)的數(shù)據(jù)傳送指令半字和有符號(hào)字節(jié)的數(shù)據(jù)傳送指令1.1.單字和單字和無(wú)符號(hào)字節(jié)無(wú)符號(hào)字節(jié)的數(shù)據(jù)傳送指令的數(shù)據(jù)傳送指令這一類數(shù)據(jù)傳送指令的匯編格式如下:一類數(shù)據(jù)傳送指令的匯編格式如下: 前變址格式前變址格式LDR|STR B Rd, Rn, ! 后變址格式后變址格式LDR|STR B T Rd, Rn, 相對(duì)相對(duì)PC的形式的形式LDR|STR B Rd

23、, LABEL 2.2.半字和有符號(hào)字節(jié)的數(shù)據(jù)傳送指令半字和有符號(hào)字節(jié)的數(shù)據(jù)傳送指令這一類數(shù)據(jù)傳送指令的匯編格式如下這一類數(shù)據(jù)傳送指令的匯編格式如下: 前變址格式前變址格式LDR|STR H|SH|SB Rd, Rn, ! 后變址格式后變址格式LDR|STR H|SH|SB Rd, Rn, 式中式中是是#或或#Rm;H|SH|SB選擇傳送數(shù)據(jù)類型;其它部分的匯編器格式與選擇傳送數(shù)據(jù)類型;其它部分的匯編器格式與傳送字和無(wú)符號(hào)字節(jié)相同。傳送字和無(wú)符號(hào)字節(jié)相同。注意注意:1.有符號(hào)位半字有符號(hào)位半字/字節(jié)加載是指用符號(hào)位加載擴(kuò)展到字節(jié)加載是指用符號(hào)位加載擴(kuò)展到32位,位,無(wú)符號(hào)半字加載是指用零擴(kuò)展到

24、無(wú)符號(hào)半字加載是指用零擴(kuò)展到32位;位;2.半字讀寫的指定地址必須為偶數(shù),否則將產(chǎn)生不可靠半字讀寫的指定地址必須為偶數(shù),否則將產(chǎn)生不可靠的結(jié)果;的結(jié)果;多寄存器存取指令多寄存器存取指令 多寄存器傳送指令可以用一條指令將多寄存器傳送指令可以用一條指令將16個(gè)可見(jiàn)寄存?zhèn)€可見(jiàn)寄存器(器(R0R15)的任意子集合(或全部)存儲(chǔ)到存儲(chǔ)器)的任意子集合(或全部)存儲(chǔ)到存儲(chǔ)器或從存儲(chǔ)器中讀取數(shù)據(jù)到該寄存器集合中?;驈拇鎯?chǔ)器中讀取數(shù)據(jù)到該寄存器集合中。匯編格式如下:匯編格式如下:LDM/STM Rn!,數(shù)據(jù)塊傳送指令和堆棧操作類似數(shù)據(jù)塊傳送指令和堆棧操作類似:;使用數(shù)據(jù)塊傳送指令使用數(shù)據(jù)塊傳送指令STMDA

25、R0!,R5-R6. . .LDMIB R0!,R5-R6;使用堆棧指令進(jìn)行堆棧操作使用堆棧指令進(jìn)行堆棧操作STMED R0!,R5-R6. . .LDMED R0!,R5-R6使用堆棧指令的壓棧和出棧操作編程很簡(jiǎn)單(只要前后一使用堆棧指令的壓棧和出棧操作編程很簡(jiǎn)單(只要前后一致即可),而使用數(shù)據(jù)塊指令進(jìn)行讀和寫操作則需要考慮致即可),而使用數(shù)據(jù)塊指令進(jìn)行讀和寫操作則需要考慮空與滿、加與減對(duì)應(yīng)的問(wèn)題??张c滿、加與減對(duì)應(yīng)的問(wèn)題。多寄存器存取指令多寄存器存取指令 多寄存器傳送指令可以用一條指令將多寄存器傳送指令可以用一條指令將16個(gè)可見(jiàn)寄存?zhèn)€可見(jiàn)寄存器(器(R0R15)的任意子集合(或全部)存儲(chǔ)到

26、存儲(chǔ)器)的任意子集合(或全部)存儲(chǔ)到存儲(chǔ)器或從存儲(chǔ)器中讀取數(shù)據(jù)到該寄存器集合中?;驈拇鎯?chǔ)器中讀取數(shù)據(jù)到該寄存器集合中。匯編格式如下:匯編格式如下:LDM/STM Rn!, :加入該后綴后加入該后綴后,1)寄存器列表不包含寄存器列表不包含PC時(shí),加載時(shí),加載/存儲(chǔ)的寄存器是用戶存儲(chǔ)的寄存器是用戶模式下的,而不是當(dāng)前模式的寄存器。模式下的,而不是當(dāng)前模式的寄存器。2)在在LDM指令且寄存器列表中包含有指令且寄存器列表中包含有PC時(shí)使用,那么時(shí)使用,那么除了正常的多寄存器傳送外,還將除了正常的多寄存器傳送外,還將SPSR也拷貝到也拷貝到CPSR中,這可用于異常處理返回。中,這可用于異常處理返回。注意

27、注意:該后綴不允許在用戶模式或系統(tǒng)模式下使用該后綴不允許在用戶模式或系統(tǒng)模式下使用。單寄存器交換指令(單寄存器交換指令(SWP)其匯編格式如下:其匯編格式如下: SWP B Rd,Rm,Rn SWP指令應(yīng)用示例:SWPR1,R1,R0; ;將R1的內(nèi)容與R0指向的存儲(chǔ)單;元的內(nèi)容進(jìn)行交換 SWPB R1,R2,R0; ;將R0指向的存儲(chǔ)單元的內(nèi)容讀;取一字節(jié)數(shù)據(jù)到R1中;(高24位清零);并將R2的內(nèi)容寫入到該內(nèi)存單元中;(最低字節(jié)有效) 簡(jiǎn)單的簡(jiǎn)單的ARM程序程序:.equx, 45; .equy, 64;.equstack_top, 0 x1000.global _start.text_s

28、tart:MOV sp, #stack_topMOV R0, #xSTRR0, spMOV R0, #yLDRR1, spADDR0, R0, R1STRR0, spstop: B stop .endDelay: NOP;空操作空操作 NOP NOP SUBS R1,R1,#1;循環(huán)次數(shù)減一循環(huán)次數(shù)減一 BNE Delay ; 計(jì)數(shù)未到計(jì)數(shù)未到0,跳轉(zhuǎn),跳轉(zhuǎn)Delay繼續(xù)繼續(xù) MOV PC,LR ;子程序返回子程序返回應(yīng)用示例(延時(shí)子程序):應(yīng)用示例(延時(shí)子程序):調(diào)用調(diào)用延時(shí)子程序延時(shí)子程序MOV R1,#1000BL Delay.global _start.text.equ NUM,20_

29、start: LDR R0,=srcSUBS R2,R2,#1LDR R1,=dstBNE wcopyMOV R2,#NUM stop: B stopMOV SP,#0 x400 bcopy: MOVS R3,R2,LSR #3 BEQ cword .ltorgSTMFD SP!,R4-R11 src:ocopy: LDMIA R0!,R4-R11 .long 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8STMIA R1!,R4-R11 .long 1,2,3,4 SUBS R3,R3,#1 dst:BNE ocopy .long 0,0,0,0,0,0,0,0,0,0,0,

30、0,0,0,0,0LDMFD SP !,R4-R11 .long 0,0,0,0 cword: ANDS R2,R2,#7 .endBEQ stopwcopy: LDR R3,R0,#4STR R3, R1,#4.fill 20,4,0實(shí)驗(yàn)一:3.2.global _start.text.equ num,2_start: mov r0,#0 ;doadd: add r0,r1,r2mov r1,#3mov pc,lr ;子程序返回子程序返回mov r2,#2dosub: sub r0,r1,r2bl arithfunc;調(diào)用子程序調(diào)用子程序mov pc,lr ;子程序返回子程序返回stop:

31、b stop.endarithfunc: ;子程序開(kāi)始子程序開(kāi)始cmp r0,#numbhs doaddadr r3,jumptableldr pc,r3,r0,lsl #2jumptable:.long doadd.long dosub,2#1 應(yīng)用示例:;子程序:使能IRQ中斷ENABLE_IRQ: MRS R0, CPSR BIC R0, R0,#0 x80 ;修改對(duì)應(yīng)于修改對(duì)應(yīng)于CPSR中的中的I控制位;控制位; MSR CPSR_c,R0 MOV PC,LR ; .返回上一層函數(shù)(子程序返回)返回上一層函數(shù)(子程序返回)3.3.33.3.3程序狀態(tài)寄存器與通用寄存器之間的傳送程序狀態(tài)

32、寄存器與通用寄存器之間的傳送 指令指令修改狀態(tài)寄存器修改狀態(tài)寄存器一般是通過(guò)一般是通過(guò)“讀取修改寫回讀取修改寫回”三個(gè)三個(gè)步驟的操作來(lái)實(shí)現(xiàn)的。步驟的操作來(lái)實(shí)現(xiàn)的??梢杂糜诟魈貦?quán)模式間的切換、可以用于各特權(quán)模式間的切換、允許允許/禁止禁止IRQ/FIQ中斷等。中斷等。 狀態(tài)寄存器到通用寄存器的傳送指令(狀態(tài)寄存器到通用寄存器的傳送指令(MRS) 通用寄存器到狀態(tài)寄存器的傳送指令通用寄存器到狀態(tài)寄存器的傳送指令(MSR) 其匯編格式如下:其匯編格式如下:MRS Rd,CPSR|SPSR MSR CPSR_f | SPSR_f,#MSR CPSR_ | SPSR_,Rm 3.3.43.3.4轉(zhuǎn)移指令

33、轉(zhuǎn)移指令 B 轉(zhuǎn)移指令:轉(zhuǎn)移指令: B BL 帶鏈接的轉(zhuǎn)移指令:帶鏈接的轉(zhuǎn)移指令: BL 轉(zhuǎn)移指令的范圍:轉(zhuǎn)移指令的范圍:32MB; 作用:子程序調(diào)用作用:子程序調(diào)用 BX 帶狀態(tài)切換的轉(zhuǎn)移指令:帶狀態(tài)切換的轉(zhuǎn)移指令:BX Rm ;完成處理器在完成處理器在ARMARM狀態(tài)與狀態(tài)與ThumbThumb狀態(tài)的切換。狀態(tài)的切換。 例:例: ADRL R0,ThumbFun+1 ; ;將將ThumbThumb程序的入口地址加程序的入口地址加1 1存入存入R0R0 BX R0 ; ; 跳轉(zhuǎn)到跳轉(zhuǎn)到R0R0指定的地址,指定的地址,; ;并根據(jù)并根據(jù)R0R0的最低位來(lái)切換處理器狀態(tài)的最低位來(lái)切換處理器狀態(tài);

34、從從Arm狀態(tài)切換到狀態(tài)切換到Thumb狀態(tài)狀態(tài) LDR R0,=Lable+1 BX R0;從從Thumb狀態(tài)切換到狀態(tài)切換到ARM狀態(tài)狀態(tài) LDR R0,=Lable BX R03.3.63.3.6異常中斷指令異常中斷指令異常中斷指令可以分為一下兩種:異常中斷指令可以分為一下兩種: 軟件中斷指令(軟件中斷指令(SWI) 斷點(diǎn)指令(斷點(diǎn)指令(BKPT僅用于僅用于V5T體系)體系) SWI用于產(chǎn)生用于產(chǎn)生SWI異常中斷,異常中斷,用來(lái)實(shí)現(xiàn)在用戶模式用來(lái)實(shí)現(xiàn)在用戶模式下對(duì)操作系統(tǒng)中特權(quán)模式的程序的調(diào)用;下對(duì)操作系統(tǒng)中特權(quán)模式的程序的調(diào)用;常稱為常稱為“監(jiān)控監(jiān)控調(diào)用調(diào)用”。操作系統(tǒng)在操作系統(tǒng)在SW

35、I異常處理程序中進(jìn)行相應(yīng)的系異常處理程序中進(jìn)行相應(yīng)的系統(tǒng)服務(wù)統(tǒng)服務(wù)。匯編格式如下:匯編格式如下: SWI 在在SWISWI異常中斷處理程序中,取出異常中斷處理程序中,取出SWISWI指令中立即數(shù)的步驟為:指令中立即數(shù)的步驟為:首先確定引起軟中斷的首先確定引起軟中斷的SWISWI指令是指令是ARMARM指令還是指令還是ThumbThumb指令,這可通指令,這可通過(guò)對(duì)過(guò)對(duì)SPSRSPSR訪問(wèn)得到;訪問(wèn)得到;然后取得該然后取得該SWISWI指令的地址,這可通過(guò)訪問(wèn)指令的地址,這可通過(guò)訪問(wèn)LRLR寄存器得到;寄存器得到;接著讀出該接著讀出該SWISWI指令,分解出立即數(shù)。指令,分解出立即數(shù)。 SWI_

36、Handler: STMFD SP!, R0-R3, R12, LR; 現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng)保護(hù) MRS R0, SPSR ; 讀取讀取SPSR STMFD SP!, R0 ; 保存保存SPSR TST R0, #0 x20 ; 測(cè)試測(cè)試T標(biāo)志位標(biāo)志位 LDRNEH R0, LR,#-2; 若是若是Thumb指令,讀取指令碼指令,讀取指令碼(16位位) BICNE R0, R0, #0 xFF00 ; 取得取得Thumb指令的指令的8位立即數(shù)位立即數(shù) LDREQ R0, LR,#-4 ; 若是若是ARM指令,讀取指令碼指令,讀取指令碼(32位位) BICEQ R0, R0, #0 xFF000000

37、;取得取得ARM指令的指令的24位立即數(shù)位立即數(shù) . LDMFD SP!, R0-R3, R12, PC; SWI異常中斷返回異常中斷返回 主要分為以下三類:主要分為以下三類: 數(shù)據(jù)操作指令;數(shù)據(jù)操作指令; 數(shù)據(jù)傳送指令;數(shù)據(jù)傳送指令; 寄存器和內(nèi)存單元之間的傳送數(shù)據(jù)。寄存器和內(nèi)存單元之間的傳送數(shù)據(jù)。 ARM內(nèi)核支持協(xié)處理器操作,協(xié)處理器的控制要通過(guò)協(xié)處理器命令實(shí)現(xiàn)。ARM內(nèi)核與協(xié)處理器的關(guān)系A(chǔ)RM內(nèi)核協(xié)處理器A協(xié)處理器B握手信號(hào)數(shù)據(jù)地址總線數(shù)據(jù)操作:數(shù)據(jù)操作: 協(xié)處理器數(shù)據(jù)操作完全是協(xié)處理器內(nèi)部的協(xié)處理器數(shù)據(jù)操作完全是協(xié)處理器內(nèi)部的操作操作,它完成協(xié)處理器寄存器的狀態(tài)改變。,它完成協(xié)處理器寄

38、存器的狀態(tài)改變。匯編格式如下:匯編格式如下:CDP ,CRd,CRn,CRm, ARM處理器通過(guò)處理器通過(guò)CDP指令通知協(xié)處理器執(zhí)行特定指令通知協(xié)處理器執(zhí)行特定的操作。該操作由協(xié)處理器完成。若協(xié)處理器不能成功的操作。該操作由協(xié)處理器完成。若協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷未定義指令異常中斷。 應(yīng)用示例:應(yīng)用示例: CDP p7,0,c0,c2,c3,0;對(duì)協(xié)處理器對(duì)協(xié)處理器7操作,操作碼為操作,操作碼為0,;可選操作碼為可選操作碼為0 CDP p6,1,c3,c4,c5;對(duì)協(xié)處理器對(duì)協(xié)處理器6操作,操作碼為操作,操作碼為1 一個(gè)系統(tǒng)最多可連接一個(gè)系統(tǒng)最

39、多可連接1616個(gè)協(xié)處理器,每個(gè)協(xié)處個(gè)協(xié)處理器,每個(gè)協(xié)處理器都通過(guò)唯一的理器都通過(guò)唯一的IDID號(hào)識(shí)別。號(hào)識(shí)別。ARM7TDMIARM7TDMI處理器包處理器包含兩個(gè)協(xié)處理器,它們不能再用在外部協(xié)處理器:含兩個(gè)協(xié)處理器,它們不能再用在外部協(xié)處理器:CP14 CP14 通信通道協(xié)處理器;通信通道協(xié)處理器;CP15 CP15 為為cachecache和和MMUMMU功能提供的系統(tǒng)控制協(xié)處功能提供的系統(tǒng)控制協(xié)處理器。理器。協(xié)處理器的數(shù)據(jù)存取協(xié)處理器的數(shù)據(jù)存取 協(xié)處理器數(shù)據(jù)存取指令協(xié)處理器數(shù)據(jù)存取指令LDC/STC指令可以指令可以將某一連續(xù)內(nèi)存單元的將某一連續(xù)內(nèi)存單元的數(shù)據(jù)讀取到協(xié)處理器的寄存器中數(shù)據(jù)

40、讀取到協(xié)處理器的寄存器中,或者,或者將協(xié)處理器的寄存器數(shù)據(jù)寫入將協(xié)處理器的寄存器數(shù)據(jù)寫入到某一連續(xù)的內(nèi)存單元中到某一連續(xù)的內(nèi)存單元中,傳送的字?jǐn)?shù)由協(xié)處理器來(lái)控制。若協(xié)處理傳送的字?jǐn)?shù)由協(xié)處理器來(lái)控制。若協(xié)處理器不能成功地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。器不能成功地執(zhí)行該操作,將產(chǎn)生未定義指令異常中斷。 前變址格式:前變址格式:LDC|STCL ,CRd,Rn ! 后變址格式:后變址格式:LDC|STCL ,CRd,Rn, 應(yīng)用示例:應(yīng)用示例: LDC p5,c2,R2,#4 LDC p5,c2,R2,#4 ; ;讀取讀取R2+4R2+4指向的內(nèi)存單元的數(shù)據(jù),指向的內(nèi)存單元的數(shù)據(jù), ; ;傳

41、送到協(xié)處理器傳送到協(xié)處理器p5p5的的c2c2寄存器中。寄存器中。 STC p5,c1,R0 STC p5,c1,R0 ; ;將協(xié)處理器將協(xié)處理器p5p5的的C1C1寄存器內(nèi)數(shù)據(jù)寄存器內(nèi)數(shù)據(jù); ;傳送到傳送到R0R0指向的內(nèi)存單元。指向的內(nèi)存單元。協(xié)處理器的寄存器傳送協(xié)處理器的寄存器傳送 協(xié)處理寄存器傳送指令使得協(xié)處理器中產(chǎn)生的整數(shù)協(xié)處理寄存器傳送指令使得協(xié)處理器中產(chǎn)生的整數(shù)能直接傳送到能直接傳送到ARMARM寄存器或者影響寄存器或者影響ARMARM條件碼標(biāo)志位。條件碼標(biāo)志位。匯編格式如下:匯編格式如下: 從協(xié)處理器傳送到從協(xié)處理器傳送到ARMARM寄存器:寄存器: MRC ,Rd,CRn,C

42、Rm, 從從ARM寄存器傳送到協(xié)處理器:寄存器傳送到協(xié)處理器:MCR ,Rd,CRn,CRm, 應(yīng)用示例:應(yīng)用示例: MCR p6,2,R7,c1,c2 ; ;將將ARMARM中的中的R7R7寄存器內(nèi)容傳遞寄存器內(nèi)容傳遞; ; 到協(xié)處理器到協(xié)處理器6 6的的C1C1和和C2C2寄存器寄存器 MRC p5,2,R2,c3,c2 ; ;將協(xié)處理器將協(xié)處理器5 5的的C3C3和和C2C2寄存器寄存器; ;內(nèi)容傳遞到內(nèi)容傳遞到ARMARM中的中的R2R2寄存器寄存器異常(中斷)簡(jiǎn)介 只要正常的程序流被暫時(shí)中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個(gè)來(lái)自外設(shè)的中斷。在處理異常之前,ARM7TDMI內(nèi)核保存當(dāng)

43、前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時(shí)可以恢復(fù)執(zhí)行原來(lái)的程序。 如果同時(shí)發(fā)生兩個(gè)或更多異常,那么將按照固定的順序來(lái)處理異常,詳見(jiàn)“異常優(yōu)先級(jí)”部分。 異常(中斷)向量地址地址異常類型異常類型進(jìn)入時(shí)的模式進(jìn)入時(shí)的模式進(jìn)入時(shí)進(jìn)入時(shí)I的的狀態(tài)狀態(tài)進(jìn)入時(shí)進(jìn)入時(shí)F的狀的狀態(tài)態(tài)0 x0000 0000復(fù)位復(fù)位管理管理(svc)禁止禁止禁止禁止0 x0000 0004未定義指令未定義指令未定義未定義(und)IF0 x0000 0008軟件中斷軟件中斷(SWI)管理管理(svc)禁止禁止F0 x0000 000C 中止(預(yù)?。┲兄梗A(yù)?。┲兄怪兄?abt)IF0 x0000 0010 中止(數(shù)據(jù))中止(數(shù)據(jù))

44、中止中止(abt)IF0 x0000 0014保留保留保留保留0 x0000 0018IRQ中斷中斷(irq)禁止禁止F0 x0000 001CFIQ快中斷快中斷(fiq)禁止禁止禁止禁止注注:表中的:表中的I I和和F F表示不對(duì)該位有影響,保留原來(lái)的值。表示不對(duì)該位有影響,保留原來(lái)的值。 1675243優(yōu)先級(jí)優(yōu)先級(jí)進(jìn)入異常在異常發(fā)生后,ARM7TDMI內(nèi)核會(huì)作以下工作:1.在適當(dāng)?shù)?LR中保存下一條指令的地址,2.將CPSR復(fù)制到適當(dāng)?shù)腟PSR中;3. 將CPSR模式位強(qiáng)制設(shè)置為與異常類型相對(duì)應(yīng)的值;4.強(qiáng)制PC從相關(guān)的異常向量處取指。轉(zhuǎn)向異常處理程序ARM7TDMI內(nèi)核在中斷異常時(shí)置位中

45、斷禁止標(biāo)志,內(nèi)核在中斷異常時(shí)置位中斷禁止標(biāo)志,這樣可以防止不受控制的異常嵌套。這樣可以防止不受控制的異常嵌套。當(dāng)異常結(jié)束時(shí),異常處理程序必須:1.將LR中的值減去偏移量后送PC,偏移量根據(jù)異常的類型而有所不同;(見(jiàn)(見(jiàn)p72p72中間部分)中間部分)2.將SPSR的值復(fù)制回CPSR;3.清零在入口置位的中斷禁止標(biāo)志。注:恢復(fù)CPSR的動(dòng)作會(huì)將T、F和I位自動(dòng)恢復(fù)為異常發(fā)生前的值。退出異常程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示進(jìn)入異常過(guò)程1. 程序在系統(tǒng)模式下運(yùn)行用戶程序,假定當(dāng)前處理器狀態(tài)為ARM狀態(tài)、允許IRQ中斷;2. 用戶程序運(yùn)行時(shí)發(fā)生IRQ中斷,硬件完成以下動(dòng)作:LR_

46、sysSPSR_irqLR_irqLRPCCPSRSPSRSYS0?0. . .? ? ? ?MODTFI. . .N Z C V置位I位(禁止IRQ中斷)清零T位(進(jìn)入ARM狀態(tài))設(shè)置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存入PC,實(shí)現(xiàn)跳轉(zhuǎn)IRQ0?1. . .? ? ? ?BackAddrJumpAddrJumpSYS0?0. . .?“?”表示對(duì)該位不關(guān)心在異常處理結(jié)束后,異常處理程序完成以下動(dòng)作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示退出異常過(guò)程LR_sysSPSR_i

47、rqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個(gè)常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1. . .? ? ? ?BackAddrJumpAddrreturnSYS0?0. . .?SYS0?0. . .? ? ? ?BackAddr-8Jump“?”表示對(duì)該位不關(guān)心.global startSWI_Handler:.text ldr lr, =Reset_Handler mov pc, lrstart: b Reset_Handler Reset_

48、Handler:Undefined_Handler: ldr r1,=0 xf0000000 b Undefined_Handlerldr r2,r1b SWI_Handler /* -Prefetch_Handler: - /*b Prefetch_Handler mov r13, #1Abort_Handler: mov r14, #2b Abort_Handler mrs r0,cpsr nop bic r0,r0,#0 x1f IRQ_Handler: orr r0,r0,#0 x10b IRQ_Handler msr cpsr,r0FIQ_Handler: mov r13, #3b

49、FIQ_Handler mov r14, #4stop: b stop.end實(shí)驗(yàn)實(shí)驗(yàn)3.4 工作模式轉(zhuǎn)換工作模式轉(zhuǎn)換改模式改模式處理器模式處理器模式說(shuō)明說(shuō)明備注備注 用戶用戶 (usr)正常程序工作模式正常程序工作模式不能直接切換到其它模式不能直接切換到其它模式 系統(tǒng)系統(tǒng) (sys)用于支持操作系統(tǒng)的特用于支持操作系統(tǒng)的特權(quán)任務(wù)等權(quán)任務(wù)等與用戶模式類似,但具有可以與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)直接切換到其它模式等特權(quán) 快中斷快中斷 (fiq)支持高速數(shù)據(jù)傳輸及通支持高速數(shù)據(jù)傳輸及通道處理道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 中斷中斷 (irq)用于通用中斷

50、處理用于通用中斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 管理管理 (svc)操作系統(tǒng)保護(hù)代碼操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式入此模式 中止中止 (abt)用于支持虛擬內(nèi)存和用于支持虛擬內(nèi)存和/或或存儲(chǔ)器保護(hù)存儲(chǔ)器保護(hù)在在ARM7TDMI沒(méi)有大用處沒(méi)有大用處 未定義未定義 (und)支持硬件協(xié)處理器的軟支持硬件協(xié)處理器的軟件仿真件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此未定義指令異常響應(yīng)時(shí)進(jìn)入此模式模式ARM處理器模式處理器模式處理器模式說(shuō)明說(shuō)明備注備注 用戶用戶 (usr)正常程序工作模式正常程序工作模式不能直接切換到其它模式不能直接切換到其它模式

51、 系統(tǒng)系統(tǒng) (sys)用于支持操作系統(tǒng)的特用于支持操作系統(tǒng)的特權(quán)任務(wù)等權(quán)任務(wù)等與用戶模式類似,但具有可以與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)直接切換到其它模式等特權(quán) 快中斷快中斷 (fiq)支持高速數(shù)據(jù)傳輸及通支持高速數(shù)據(jù)傳輸及通道處理道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 中斷中斷 (irq)用于通用中斷處理用于通用中斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 管理管理 (svc)操作系統(tǒng)保護(hù)代碼操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式入此模式 中止中止 (abt)用于支持虛擬內(nèi)存和用于支持虛擬內(nèi)存和/或或存儲(chǔ)器保護(hù)存

52、儲(chǔ)器保護(hù)在在ARM7TDMI沒(méi)有大用處沒(méi)有大用處 未定義未定義 (und)支持硬件協(xié)處理器的軟支持硬件協(xié)處理器的軟件仿真件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此未定義指令異常響應(yīng)時(shí)進(jìn)入此模式模式ARM處理器模式 除用戶模式外,其它模式均為除用戶模式外,其它模式均為特權(quán)模特權(quán)模式式。ARMARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)模式下訪問(wèn)。此外,特權(quán)模式可以自由的模式下訪問(wèn)。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切切換處理器模式,而用戶模式不能直接切換到別的模式。換到別的模式。處理器模式

53、處理器模式說(shuō)明說(shuō)明備注備注 用戶用戶 (usr)正常程序工作模式正常程序工作模式不能直接切換到其它模式不能直接切換到其它模式 系統(tǒng)系統(tǒng) (sys)用于支持操作系統(tǒng)的特用于支持操作系統(tǒng)的特權(quán)任務(wù)等權(quán)任務(wù)等與用戶模式類似,但具有可以與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)直接切換到其它模式等特權(quán) 快中斷快中斷 (fiq)支持高速數(shù)據(jù)傳輸及通支持高速數(shù)據(jù)傳輸及通道處理道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 中斷中斷 (irq)用于通用中斷處理用于通用中斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 管理管理 (svc)操作系統(tǒng)保護(hù)代碼操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響

54、應(yīng)時(shí)進(jìn)系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式入此模式 中止中止 (abt)用于支持虛擬內(nèi)存和用于支持虛擬內(nèi)存和/或或存儲(chǔ)器保護(hù)存儲(chǔ)器保護(hù)在在ARM7TDMI沒(méi)有大用處沒(méi)有大用處 未定義未定義 (und)支持硬件協(xié)處理器的軟支持硬件協(xié)處理器的軟件仿真件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此未定義指令異常響應(yīng)時(shí)進(jìn)入此模式模式ARM處理器模式 這五種模式稱為這五種模式稱為異常模式異常模式。它們除了可。它們除了可以通過(guò)程序切換進(jìn)入外,也可以由特定的異以通過(guò)程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。當(dāng)特定的異常出現(xiàn)時(shí),處理器進(jìn)入常進(jìn)入。當(dāng)特定的異常出現(xiàn)時(shí),處理器進(jìn)入相應(yīng)的模式。每種異常模式都有一些獨(dú)立的相應(yīng)的模式。每

55、種異常模式都有一些獨(dú)立的寄存器,以避免異常退出時(shí)用戶模式的狀態(tài)寄存器,以避免異常退出時(shí)用戶模式的狀態(tài)不可靠。不可靠。處理器模式處理器模式說(shuō)明說(shuō)明備注備注 用戶用戶 (usr)正常程序工作模式正常程序工作模式不能直接切換到其它模式不能直接切換到其它模式 系統(tǒng)系統(tǒng) (sys)用于支持操作系統(tǒng)的特用于支持操作系統(tǒng)的特權(quán)任務(wù)等權(quán)任務(wù)等與用戶模式類似,但具有可以與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)直接切換到其它模式等特權(quán) 快中斷快中斷 (fiq)支持高速數(shù)據(jù)傳輸及通支持高速數(shù)據(jù)傳輸及通道處理道處理FIQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 中斷中斷 (irq)用于通用中斷處理用于通用中

56、斷處理IRQ異常響應(yīng)時(shí)進(jìn)入此模式異常響應(yīng)時(shí)進(jìn)入此模式 管理管理 (svc)操作系統(tǒng)保護(hù)代碼操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式入此模式 中止中止 (abt)用于支持虛擬內(nèi)存和用于支持虛擬內(nèi)存和/或或存儲(chǔ)器保護(hù)存儲(chǔ)器保護(hù)在在ARM7TDMI沒(méi)有大用處沒(méi)有大用處 未定義未定義 (und)支持硬件協(xié)處理器的軟支持硬件協(xié)處理器的軟件仿真件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此未定義指令異常響應(yīng)時(shí)進(jìn)入此模式模式ARM處理器模式 這兩種模式都不是由異常進(jìn)入,而且這兩種模式都不是由異常進(jìn)入,而且它們使用完全相同的寄存器組。它們使用完全相同的寄存器組。 系統(tǒng)模式是特權(quán)模式,不受用戶模式系統(tǒng)模式是特權(quán)模式

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論