《ARM7TDMI指令系統(tǒng)》PPT課件.ppt_第1頁
《ARM7TDMI指令系統(tǒng)》PPT課件.ppt_第2頁
《ARM7TDMI指令系統(tǒng)》PPT課件.ppt_第3頁
《ARM7TDMI指令系統(tǒng)》PPT課件.ppt_第4頁
《ARM7TDMI指令系統(tǒng)》PPT課件.ppt_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章ARM7TDMI(-S)指令系統(tǒng),1.ARM程序的文件類型: C程序:ARM開發(fā)中大部分程序使用C語言編寫,文件類型為“*.C”; 匯編程序:涉及到硬件底層操作的代碼有時(shí)必須使用匯編語言編寫,文件類型為“*.S”。 2.為什么學(xué)習(xí)ARM指令系統(tǒng): 操作系統(tǒng)移植 編寫啟動代碼 方便程序調(diào)試,前言,1. ARM處理器的尋址方式; 2. ARM指令的特點(diǎn); 3. ARM指令的種類,它能完成哪些功能。,本章學(xué)習(xí)重點(diǎn),目錄,1.ARM處理器尋址方式 2.指令集介紹 ARM指令集 Thumb指令集,目錄,1.ARM處理器尋址方式 2.指令集介紹 ARM指令集 Thumb指令集,第3章 ARM7TDM

2、I(-S)指令系統(tǒng),簡介,ARM處理器是基于精簡指令集計(jì)算機(jī)(RISC)原理設(shè)計(jì)的,指令集和相關(guān)譯碼機(jī)制較為簡單。ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代碼密度低;而Thumb指令集具有較高的代碼密度,卻仍然保持ARM的大多數(shù)性能上的優(yōu)勢,它是ARM指令集的子集。所有的ARM指令都是可以有條件執(zhí)行的,而Thumb指令僅有一條指令具備條件執(zhí)行功能。ARM程序和Thumb程序可相互調(diào)用,相互之間的狀態(tài)切換開銷幾乎為零。,第3章 ARM7TDMI(-S)指令系統(tǒng),ARM指令集與Thumb指令集的關(guān)系,Thumb指令集具有靈活、小巧的特點(diǎn),AR

3、M指令集支持ARM核所有的特性,具有高效、快速的特點(diǎn),3.1 ARM處理器尋址方式,尋址方式分類,尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。 1.寄存器尋址;2.立即尋址; 3.寄存器移位尋址;4.寄存器間接尋址; 5.基址尋址;6.多寄存器尋址; 7.堆棧尋址;8.相對尋址。,操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時(shí)直接取出寄存器值來操作。寄存器尋址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結(jié)果保存到R0,3.1 ARM處理器尋址方式,

4、尋址方式分類寄存器尋址,MOV R1,R2,0 xAA,立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)志位 MOVR0,#0 xFF000 ;將立即數(shù)0 xFF000裝入R0寄存器,3.1 ARM處理器尋址方式,尋址方式分類立即尋址,MOV R0,#0 xFF00,0 xFF00,從代碼中獲得數(shù)據(jù),寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個(gè)操作數(shù)是寄存器移位方式時(shí),第2個(gè)寄存器操作數(shù)在與第1個(gè)操

5、作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下: MOVR0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與”操作,結(jié)果放入R1,3.1 ARM處理器尋址方式,尋址方式分類寄存器移位尋址,MOV R0,R2,LSL #3,0 x08,0 x08,邏輯左移3位,寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存儲單元的數(shù)據(jù)讀出 ;保

6、存在R1中 SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲 ;單元的內(nèi)容交換,3.1 ARM處理器尋址方式,尋址方式分類寄存器間接尋址,LDR R0,R2,0 xAA,基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等。基址尋址指令舉例如下: LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲單元 ;的內(nèi)容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存 ;到保存到R0指定的存儲單元,3.1 ARM處理器尋址方式,尋址方式分類基址尋址

7、,LDR R2,R3,#0 x0C,0 xAA,將R3+0 x0C作為地址裝載數(shù)據(jù),多寄存器尋址一次可傳送幾個(gè)寄存器值,允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將R1指向的單元中的數(shù)據(jù)讀出到 ;R2R7、R12中(R1自動加1) STMIAR0!,R2-R7,R12 ;將寄存器R2R7、R12的值保 ;存到R0指向的存儲; 單元中 ;(R0自動加1),3.1 ARM處理器尋址方式,尋址方式分類多寄存器尋址,LDMIA R1!,R2-R4,R6,0 x40000010,堆棧是一個(gè)按特定順序進(jìn)行存取的存儲區(qū),操作順序?yàn)?/p>

8、“后進(jìn)先出” 。堆棧尋址是隱含的,它使用一個(gè)專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針?biāo)赶虻拇鎯卧词嵌褩5臈m敗4鎯ζ鞫褩?煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧 向下生長:向低地址方向生長,稱為遞減堆棧,3.1 ARM處理器尋址方式,尋址方式分類堆棧尋址,3.1 ARM處理器尋址方式,尋址方式分類堆棧尋址,0 x12345678,0 x12345678,堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧。,3.1 ARM處理器尋址方式,尋址方式分類堆棧尋址,0 x12345678,所以可以組合出四種類型的堆棧方

9、式: 滿遞增:堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等; 空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個(gè)空位置。指令如LDMED、STMED等。,3.1 ARM處理器尋址方式,尋址方式分類堆棧尋址,相對尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令舉例如下: BLSUBR1;調(diào)用

10、到SUBR1子程序 BEQLOOP;條件跳轉(zhuǎn)到LOOP標(biāo)號處 . LOOPMOVR6,#1 . SUBR1.,3.1 ARM處理器尋址方式,尋址方式分類相對尋址,1. ARM處理器的尋址方式 8種尋址方式; 2. ARM指令的特點(diǎn); 3. ARM指令的種類,它能完成哪些功能。,本章學(xué)習(xí)重點(diǎn),目錄,1.ARM處理器尋址方式 2.指令集介紹 ARM指令集 Thumb指令集,簡單的ARM程序,;文件名:TEST1.S ;功能:實(shí)現(xiàn)兩個(gè)寄存器相加 ;說明:使用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識程序入口 C

11、ODE32 ;聲明32位ARM指令 START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10 LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOP ADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結(jié)束,使用“;”進(jìn)行注釋,標(biāo)號頂格寫,實(shí)際代碼段,聲明文件結(jié)束,;文件名:TEST1.S ;功能:實(shí)現(xiàn)兩個(gè)寄存器相加 ;說明:使用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識程序入口 CODE32 ;聲明32位A

12、RM指令 START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10 LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOP ADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結(jié)束,簡單的ARM程序,目錄,1.ARM處理器尋址方式 2.指令集介紹 ARM指令集 Thumb指令集,ARM指令小節(jié)目錄,1.指令格式 2.條件碼 3.ARM指令,ARM指令小節(jié)目錄,1.指令格式 2.條件碼 3.ARM指令,ARM指令的基本格式如下:,3.2 指令集介紹,ARM指令集指令格式, S ,其中號內(nèi)的項(xiàng)是必須的

13、,號內(nèi)的項(xiàng)是可選的。各項(xiàng)的說明如下:,opcode:指令助記符;cond:執(zhí)行條件; S:是否影響CPSR寄存器的值; Rd:目標(biāo)寄存器; Rn:第1個(gè)操作數(shù)的寄存器; operand2:第2個(gè)操作數(shù);,ARM指令小節(jié)目錄,1.指令格式 2.條件碼 3.ARM指令,ARM指令的基本格式如下:,3.2 指令集介紹,ARM指令集條件碼, S ,使用條件碼“cond”可以實(shí)現(xiàn)高效的邏輯操作,提高代碼效率。 絕大部分的ARM指令都可以條件執(zhí)行,而Thumb指令只有B(跳轉(zhuǎn))指令具有條件執(zhí)行 功能。如果指令不標(biāo)明條件代碼,將默認(rèn)為無條件(AL)執(zhí)行。,指令條件碼表,3.2 指令集介紹,ARM指令集條件碼

14、,C代碼: if(a b) a+; else b+;,對應(yīng)的匯編代碼: CMPR0,R1 ;R0與R1比較 ADDHIR0,R0,#1 ;若R0R1,則R0=R0+1 ADDLSR1,R1,#1 ;若R0R1,則R1=R1+1,示例:,1. ARM處理器的尋址方式 8種尋址方式; 2. ARM指令的特點(diǎn) 可條件執(zhí)行、可選擇影響標(biāo)志位 3. ARM指令的種類,它能完成哪些功能。,本章學(xué)習(xí)重點(diǎn),ARM指令種類,1.存儲器訪問指令 2.數(shù)據(jù)處理指令 3.乘法指令 4.ARM分支指令 5.協(xié)處理器指令 6.雜項(xiàng)指令 7.偽指令,為什么要掌握部分常用ARM指令? 熟悉ARM體系結(jié)構(gòu):通過指令的學(xué)習(xí)可以更

15、深入的了解ARM硬件結(jié)構(gòu)的特點(diǎn); 修改啟動代碼:啟動代碼為了滿足大部分系統(tǒng)的順利運(yùn)行,通常將系統(tǒng)硬件配置在最低性能,通過調(diào)整啟動代碼中的參數(shù)使其更適合自己的硬件系統(tǒng); 調(diào)試程序:通過觀察反匯編代碼了解程序執(zhí)行情況,比如某個(gè)變量的操作是否被編譯器優(yōu)化掉了。 閱讀已有的匯編代碼;,ARM指令種類,1.存儲器訪問指令 2.數(shù)據(jù)處理指令 3.乘法指令 4.ARM分支指令 5.協(xié)處理器指令 6.雜項(xiàng)指令 7.偽指令,3.2 指令集介紹,ARM指令集存儲器訪問指令,ARM處理器是典型的RISC處理器,對存儲器的訪問只能使用加載和存儲指令實(shí)現(xiàn)。ARM處理器是馮諾依曼存儲結(jié)構(gòu),程序空間、RAM空間及I/O映射

16、空間統(tǒng)一編址,除對RAM操作以外,對外圍IO、程序數(shù)據(jù)的訪問均要通過加載/存儲指令進(jìn)行。 存儲器訪問指令分為單寄存器操作指令和多寄存器操作指令。,LDR/STR指令用于對內(nèi)存變量的訪問、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問、查表、外圍部件的控制操作等。若使用LDR指令加載數(shù)據(jù)到PC寄存器,則實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。 所有單寄存器加載/存儲指令可分為“字和無符號字節(jié)加載存儲指令”和“半字和有符號字節(jié)加載存儲指令。,3.2 指令集介紹,ARM存儲器訪問指令單寄存器存取,3.2 指令集介紹,ARM存儲器訪問指令單寄存器存取,3.2 指令集介紹,ARM存儲器訪問指令單寄存器存取,裝載指令:LDR,存

17、儲指令:STR,LDR/STR指令搭配不同的后綴實(shí)現(xiàn)不同方式的單寄存器存取操作:,ARM存儲器訪問指令裝載指令,ARM存儲器訪問指令保存指令,ARM存儲器訪問指令地址形式,應(yīng)用示例: LDRR2,R5 ;將R5指向地址的字?jǐn)?shù)據(jù)存入R2,0 x12345678,ARM存儲器訪問指令單寄存器轉(zhuǎn)載應(yīng)用,應(yīng)用示例: STRR1,R2,#0 x04 ;將R1的數(shù)據(jù)存儲到R0+0 x04地址,0 x12345678,+4,ARM存儲器訪問指令單寄存器保存應(yīng)用,3.2 指令集介紹,ARM存儲器訪問指令多寄存器存取,多寄存器加載/存儲指令可以實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個(gè)寄

18、存器;STM為存儲多個(gè)寄存器。允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。,3.2 指令集介紹,ARM存儲器訪問指令多寄存器存取,3.2 指令集介紹,ARM存儲器訪問指令多寄存器存取,裝載指令:LDM,存儲指令:STM,LDM/STM指令搭配不同的后綴實(shí)現(xiàn)不同方式地址增長方式:,0 x40000000,R1,R2,0 x?,0 x01,0 x40000000,0 x?,R3,R4,0 x?,R6,0 x?,0 x02,0 x03,0 x04,0 x40000004,0 x40000008,0 x4000000C,存儲器,0 x40000010

19、,應(yīng)用示例: LDMIA R1!,R2-R4,R6 將R1指向的內(nèi)存數(shù)據(jù)讀取到R0-R4和R6寄存器中,ARM存儲器訪問指令多寄存器存取,3.2 指令集介紹,SWP指令用于將一個(gè)內(nèi)存單元(該單元地址放在寄存器Rn中)的內(nèi)容讀取到一個(gè)寄存器Rd中,同時(shí)將另一個(gè)寄存器Rm的內(nèi)容寫入到該內(nèi)存單元中。使用SWP可實(shí)現(xiàn)信號量操作。,ARM存儲器訪問指令寄存器和存儲器交換指令,3.2 指令集介紹,ARM存儲器訪問指令寄存器和存儲器交換指令,3.2 指令集介紹,ARM存儲器訪問指令寄存器和存儲器交換指令,裝載指令: SWP 讀入寄存器,輸出寄存器,目標(biāo)地址,3.2 指令集介紹,ARM存儲器訪問指令寄存器和存

20、儲器交換指令,應(yīng)用示例: SWPR2,R1,R0 將R1的內(nèi)容與R0指向的存儲單元的內(nèi)容進(jìn)行交換,0 x12345678,0 x11223344,ARM指令種類,1.存儲器訪問指令 2.數(shù)據(jù)處理指令 3.乘法指令 4.ARM分支指令 5.協(xié)處理器指令 6.雜項(xiàng)指令 7.偽指令,3.2 指令集介紹,ARM指令集ARM數(shù)據(jù)處理指令,數(shù)據(jù)處理指令大致可分為3類: 數(shù)據(jù)傳送指令; 算術(shù)邏輯運(yùn)算指令; 比較指令。 數(shù)據(jù)處理指令只能對寄存器的內(nèi)容進(jìn)行操作,而不能對內(nèi)存中的數(shù)據(jù)進(jìn)行操作。影響狀態(tài)標(biāo)志。,思考與練習(xí),?,1.MOV指令與LDR指令都是往目標(biāo)寄存器中傳送數(shù)據(jù),但是它們有什么區(qū)別嗎?,思考與練習(xí),

21、?,1.MOV指令與LDR指令都是往目標(biāo)寄存器中傳送數(shù)據(jù),但是它們有什么區(qū)別嗎? MOV指令用于將數(shù)據(jù)從一個(gè)寄存器傳送到另一個(gè)寄存器中,或者將一個(gè)常數(shù)傳送到一個(gè)寄存器中,但是不能訪問內(nèi)存。LDR指令用于從內(nèi)存中讀取數(shù)據(jù)放入寄存器中。,3.2 指令集介紹,ARM指令集乘法指令,ARM7TDMI具有三種乘法指令,分別為: 3232位乘法指令; 32 32位乘加指令; 32 32位結(jié)果為64位的乘/乘加指令。,ARM指令種類,1.存儲器訪問指令 2.數(shù)據(jù)處理指令 3.乘法指令 4.ARM分支指令 5.協(xié)處理器指令 6.雜項(xiàng)指令 7.偽指令,3.2 指令集介紹,ARM指令集程序如何跳轉(zhuǎn),在ARM中有兩

22、種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn): 1.直接向PC寄存器賦值實(shí)現(xiàn)跳轉(zhuǎn); 例: MOV PC,R14 2.使用分支指令直接跳轉(zhuǎn)。,3.2 指令集介紹,ARM指令集,分支指令,3.2 指令集介紹,ARM指令集,分支指令,OpCode 跳轉(zhuǎn)目標(biāo),ARM指令分支指令,B/BL指令編碼格式,因?yàn)橛脕肀硎灸繕?biāo)地址的位數(shù)有限,所以B/BL指令無法實(shí)現(xiàn)4G(32位)范圍內(nèi)的任意跳轉(zhuǎn),3.2 指令集介紹,B指令為簡單的跳轉(zhuǎn)指令,不附帶其它功能。跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)(ARM指令為字對齊,最低2位地址固定為0)。,ARM指令集,分支指令,“B”,ARM指令分支指令,帶鏈接的分支指令BL指令除了具有跳轉(zhuǎn)功

23、能,還能在跳轉(zhuǎn)之前將下一條指令的地址拷貝到R14(即LR) 鏈接寄存器中,它適用于子程序調(diào)用。跳轉(zhuǎn)范圍限制在當(dāng)前指令的32M字節(jié)地址內(nèi)。指令格式如下:,Addr1,Addr2,1.當(dāng)程序執(zhí)行到BL跳轉(zhuǎn)指令時(shí),硬件將下一條指令的地址Addr2裝入LR寄存器,并把跳轉(zhuǎn)地址裝入程序計(jì)數(shù)器(PC),2. 程序跳轉(zhuǎn)到目標(biāo)地址Label繼續(xù)執(zhí)行,當(dāng)子程序執(zhí)行結(jié)束后,將LR寄存器內(nèi)容存入PC,返回調(diào)用函數(shù)繼續(xù)執(zhí)行,“BL”,例如: BL DelayNS;調(diào)用子程序DelayNS,ARM指令分支指令,帶狀態(tài)切換的分支指令BX指令除了具有跳轉(zhuǎn)功能,還能在跳轉(zhuǎn)的同時(shí)切換處理器狀態(tài)。其跳轉(zhuǎn)范圍不受限制。指令格式如下

24、:,“BX”,ARM指令分支指令,帶狀態(tài)切換的分支指令BX指令除了具有跳轉(zhuǎn)功能,還能在跳轉(zhuǎn)的同時(shí)切換處理器狀態(tài)。其跳轉(zhuǎn)范圍不受限制。指令格式如下:,“BX”,例如: ADRLR0,T_Fun+1 ;將Thumb程序的入口地址加1存入R0 BXR0 ; 跳轉(zhuǎn)到R0指定的地址, ;并根據(jù)R0的最低位來切換處理器狀態(tài),ARM指令種類,1.存儲器訪問指令 2.數(shù)據(jù)處理指令 3.乘法指令 4.ARM分支指令 5.協(xié)處理器指令 6.雜項(xiàng)指令 7.偽指令,ARM指令種類,1.存儲器訪問指令 2.數(shù)據(jù)處理指令 3.乘法指令 4.ARM分支指令 5.協(xié)處理器指令 6.雜項(xiàng)指令 7.偽指令,在ARM指令集中雜項(xiàng)指

25、令共有3條,它們非常重要,特別是與操作系統(tǒng)的使用息息相關(guān): 1.軟件中斷產(chǎn)生指令:SWI 2. 程序狀態(tài)寄存器讀指令:MRS 3. 程序狀態(tài)寄存器寫指令:MSR,3.2 指令集介紹,ARM指令集雜項(xiàng)指令,3.2 指令集介紹,ARM指令集軟中斷指令,SWI指令用于產(chǎn)生軟中斷,主要用于用戶程序調(diào)用操作系統(tǒng)的系統(tǒng)服務(wù)。執(zhí)行該指令后,處理器將完成以下動作: 1. 切換到管理模式 2. 將CPSR備份到管理模式下的SPSR寄存器 3. 程序跳轉(zhuǎn)到軟件中斷入口,“SWI”,1.使用操作系統(tǒng)后,為了防止出錯(cuò)的任務(wù)影響其它任務(wù)的執(zhí)行,通常將任務(wù)放在用戶模式執(zhí)行,以限制其權(quán)限;,2.對于一些重要的操作,如中斷的

26、開關(guān),必須由操作系統(tǒng)完成。使用軟件中斷指令即可完成系統(tǒng)功能調(diào)用;,ARM雜項(xiàng)指令軟中斷指令,3.2 指令集介紹,ARM指令集軟中斷指令,SWI指令格式如下所示:,“SWI”,ARM雜項(xiàng)指令軟中斷指令,根據(jù)SWI指令傳遞的參數(shù)SWI異常處理程序可以作出相應(yīng)的處理。SWI指令傳遞參數(shù)有以下兩種方法, 指令中的24位立即數(shù)指定了用戶請求的服務(wù)類型,參數(shù)通過通用寄存器傳遞。 MOV R0,#34;設(shè)置子功能號為34 SWI 12;調(diào)用12號軟中斷 指令中的24位立即數(shù)被忽略,用戶請求的服務(wù)類型由寄存器R0的值決定,參數(shù)通過其它的通用寄存器傳遞。 MOV R0,#12;調(diào)用12號軟中斷 MOV R1,#

27、34;設(shè)置子功能號為34 SWI 0,ARM雜項(xiàng)指令軟中斷指令,在SWI異常中斷處理程序中,取出SWI指令中立即數(shù)的步驟為: 首先確定引起軟中斷的SWI指令是ARM指令還是Thumb指令,這可通過對SPSR訪問得到; 然后取得該SWI指令的地址,這可通過訪問LR寄存器得到; 接著讀出該SWI指令,分解出立即數(shù)。,SWI_Handler STMFD SP!, R0-R3, R12, LR; 現(xiàn)場保護(hù) MRS R0, SPSR ; 讀取SPSR STMFD SP!, R0 ; 保存SPSR TST R0, #0 x20 ; 測試T標(biāo)志位 LDRNEH R0, LR,#-2 ; 若是Thumb指令,

28、讀取指令碼(16位) BICNE R0, R0, #0 xFF00; 取得Thumb指令的8位立即數(shù) LDREQ R0, LR,#-4 ; 若是ARM指令,讀取指令碼(32位) BICEQ R0, R0, #0 xFF000000 ; 取得ARM指令的24位立即數(shù) . LDMFD SP!, R0-R3, R12, PC; SWI異常中斷返回,3.2 指令集介紹,ARM指令集狀態(tài)寄存器讀指令,在ARM處理器中,只有MRS指令可以對狀態(tài)寄存器CPSR和SPSR進(jìn)行讀操作。通過讀CPSR可以了解當(dāng)前處理器的工作狀態(tài)。讀SPSR寄存器可以了解到進(jìn)入異常前的處理器狀態(tài)。指令格式如下所示:,“MRS”,3

29、.2 指令集介紹,ARM指令集狀態(tài)寄存器寫指令,示例,將R0的內(nèi)容寫入CPSR寄存器的控制位域 MSR CPSR_c,R0,“MSR”,Byte0,ARM雜項(xiàng)指令狀態(tài)寄存器寫指令,“MSR”,啟動代碼堆棧初始化應(yīng)用示例: INITSTACK MOV R0,LR ;設(shè)置管理模式堆棧 MSR CPSR_C,#0 xD3 LDR SP,StackSvc ;設(shè)置中斷模式堆棧 MSR CPSR_C,#0 xD2 LDR SP,StackIrq .,MSR CPSR_C,#0 xD2,CPRS寄存器,思考與練習(xí),?,1. 使用MSR和MRS指令,通過修改CPSR寄存器,實(shí)現(xiàn)打開/關(guān)閉IRQ中斷的兩個(gè)子程序,注意不能影響其它位?,(1),(2),(3),(4),;子程序:使能IRQ中斷 Enable_IRQ MRS R0, CPSR BIC R0, R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR,;子程序:禁能IRQ中斷 Disable_IRQ MRS R0 CPSR ORR R0, R0,#0 x80 MSR

溫馨提示

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

評論

0/150

提交評論