版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1.ARM程序的文件類型:C程序:ARM開發(fā)中大部分程序使用C語言編寫,文件類型為“*.C”;匯編程序:涉及到硬件底層操作的代碼有時必須使用匯編語言編寫,文件類型為“*.S”。2.為什么學(xué)習ARM指令系統(tǒng):操作系統(tǒng)移植編寫啟動代碼方便程序調(diào)試1. ARM處理器的尋址方式;2. ARM指令的特點;3. ARM指令的種類,它能完成哪些功能。本章學(xué)習重點目錄q1.ARM處理器尋址方式q2.指令集介紹qARM指令集qThumb指令集目錄q1.ARM處理器尋址方式q2.指令集介紹qARM指令集qThumb指令集第3章 ARM7TDMI(-S)指令系統(tǒng) 簡介 ARM處理器是基于精簡指令集計算機(RISC)
2、原理設(shè)計的,指令集和相關(guān)譯碼機制較為簡單。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指令集具有靈活、小巧的特點ARM指令集支持ARM核所有的特性,具有高效、快速的特點3.1 ARM處理器尋址
3、方式 尋址方式分類 尋址方式是根據(jù)指令中給出的地址碼字段來實現(xiàn)尋找真實操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址;2.立即尋址;3.寄存器移位尋址;4.寄存器間接尋址;5.基址尋址;6.多寄存器尋址;7.堆棧尋址;8.相對尋址。 操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結(jié)果保存到R0 0 xAA0 x55R2R13.1 ARM處理器尋址方式 尋址方式分類寄存器尋址MOV R1,R2MOV R1,R2
4、0 xAA 立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下: SUBS R0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標志位MOV R0,#0 xFF000 ;將立即數(shù)0 xFF000裝入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存儲3.1 ARM處理器尋址方式 尋址方式分類立即尋址MOV R0,#0 xFF00MOV R0,#0 xFF000 xFF00從代碼中獲得數(shù)據(jù) 寄存器移位尋址是ARM指令集特有的尋址方式。當?shù)?個操作數(shù)是寄存器移位方式
5、時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進行移位操作。寄存器移位尋址指令舉例如下:MOV R0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0, ;即是R0=R28 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與操作,結(jié)果放入R10 x55R0R20 x013.1 ARM處理器尋址方式 尋址方式分類寄存器移位尋址MOV R0,R2,LSL #3MOV R0,R2,LSL #30 x080 x08邏輯左移3位 寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。
6、寄存器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存儲單元的數(shù)據(jù)讀出;保存在R1中 SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲;單元的內(nèi)容交換 0 x55R0R2 0 x400000000 xAA0 x400000003.1 ARM處理器尋址方式 尋址方式分類寄存器間接尋址LDR R0,R2LDR R0,R20 xAA 基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等?;穼ぶ分噶钆e例如下: LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲單元
7、;的內(nèi)容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存 ;到保存到R0指定的存儲單元 3.1 ARM處理器尋址方式 尋址方式分類基址尋址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數(shù)據(jù) 多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將R1指向的單元中的數(shù)據(jù)讀出到 ;R2R7、R12中(R1自動加1) STMIAR0!,R2
8、-R7,R12 ;將寄存器R2R7、R12的值保 ;存到R0指向的存儲; 單元中 ;(R0自動加1)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲器3.1 ARM處理器尋址方式 尋址方式分類多寄存器尋址LDMIA R1!,R2-R4,R6 LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010 堆棧是一個按特定順序進行存取的存儲區(qū),操作順序為“后進先出” 。堆棧尋址是隱含的,它使用一個專門的
9、寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧3.1 ARM處理器尋址方式 尋址方式分類堆棧尋址3.1 ARM處理器尋址方式 尋址方式分類堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲區(qū)棧頂棧底棧區(qū)SP向下增長向上增長0 x123456780 x12345678堆棧壓棧堆棧壓棧棧頂SP棧頂SP棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧;堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。 3.1 ARM處理器尋址方式 尋址方式分類堆棧尋址0 x1
10、23456780 x12345678棧頂SP0 x12345678棧頂SP壓棧壓棧所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。 3.1 ARM處理器尋址方式 尋址方式分類堆棧尋址 相對尋址是基址尋址的一種變通。由程序計數(shù)器PC提供基準地址,指令中的
11、地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令舉例如下:BLSUBR1;調(diào)用到SUBR1子程序BEQLOOP;條件跳轉(zhuǎn)到LOOP標號處.LOOP MOV R6,#1.SUBR1. 3.1 ARM處理器尋址方式 尋址方式分類相對尋址1. ARM處理器的尋址方式 8種尋址方式;2. ARM指令的特點;3. ARM指令的種類,它能完成哪些功能。本章學(xué)習重點目錄q1.ARM處理器尋址方式q2.指令集介紹qARM指令集qThumb指令集 簡單的ARM程序;文件名:TEST1.S ;功能:實現(xiàn)兩個寄存器相加 ;說明:使用ARMulate軟件仿真調(diào)試 AREAExample1,
12、CODE,READONLY ;聲明代碼段Example1 ENTRY ;標識程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結(jié)束 使用“;”進行注釋標號頂格寫實際代碼段聲明文件結(jié)束;文件名:TEST1.S ;功能:實現(xiàn)兩個寄存器相加 ;說明:使用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,READONLY ;聲明代碼段
13、Example1 ENTRY ;標識程序入口 CODE32 ;聲明32位ARM指令START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結(jié)束 簡單的ARM程序目錄q1.ARM處理器尋址方式q2.指令集介紹qARM指令集qThumb指令集ARM指令小節(jié)目錄1.指令格式2.條件碼3.ARM指令A(yù)RM指令小節(jié)目錄1.指令格式2.條件碼3.ARM指令 ARM指令的基本格式如下:3.2 指令集介紹 A
14、RM指令集指令格式 S , 其中號內(nèi)的項是必須的,號內(nèi)的項是可選的。各項的說明如下:opcode:指令助記符;:指令助記符;cond:執(zhí)行條件;:執(zhí)行條件;S:是否影響:是否影響CPSR寄存器的值;寄存器的值;Rd:目標寄存器;:目標寄存器; Rn:第:第1個操作數(shù)的寄存器;個操作數(shù)的寄存器;operand2:第:第2個操作數(shù);個操作數(shù);ARM指令小節(jié)目錄1.指令格式2.條件碼3.ARM指令 ARM指令的基本格式如下:3.2 指令集介紹 ARM指令集條件碼 S , 使用條件碼“cond可以實現(xiàn)高效的邏輯操作,提高代碼效率。 絕大部分的ARM指令都可以條件執(zhí)行,而Thumb指令只有B跳轉(zhuǎn)指令具有
15、條件執(zhí)行 功能。如果指令不標明條件代碼,將默認為無條件AL執(zhí)行。操作碼條件助記符標志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數(shù)大于1001LSC=0,Z=1無符號數(shù)小于或等于1010GEN=V有符號數(shù)大于或等于 1011LTN!=V有符號數(shù)小于 1100GTZ=0,N=V有符號數(shù)大于 1101LEZ=1,N!=V有符號數(shù)小于或等于 1110AL任何無條件執(zhí)行 (指令默認條件) 11
16、11NV任何從不執(zhí)行(不要使用) 指令條件碼表3.2 指令集介紹 ARM指令集條件碼C代碼:if(a b)a+;elseb+;對應(yīng)的匯編代碼:CMPR0,R1 ;R0與R1比較ADDHI R0,R0,#1 ;若R0R1,則R0=R0+1ADDLS R1,R1,#1 ;若R0R1,則R1=R1+1例如:1. ARM處理器的尋址方式 8種尋址方式;2. ARM指令的特點可條件執(zhí)行、可選擇影響標志位3. ARM指令的種類,它能完成哪些功能。本章學(xué)習重點ARM指令種類1.存儲器訪問指令2.數(shù)據(jù)處理指令3.乘法指令4.ARM分支指令5.協(xié)處理器指令6.雜項指令7.偽指令 為什么要掌握部分常用ARM指令?
17、熟悉ARM體系結(jié)構(gòu):通過指令的學(xué)習可以更深入的了解ARM硬件結(jié)構(gòu)的特點;修改啟動代碼:啟動代碼為了滿足大部分系統(tǒng)的順利運行,通常將系統(tǒng)硬件配置在最低性能,通過調(diào)整啟動代碼中的參數(shù)使其更適合自己的硬件系統(tǒng);調(diào)試程序:通過觀察反匯編代碼了解程序執(zhí)行情況,比如某個變量的操作是否被編譯器優(yōu)化掉了。閱讀已有的匯編代碼;ARM指令種類1.存儲器訪問指令2.數(shù)據(jù)處理指令3.乘法指令4.ARM分支指令5.協(xié)處理器指令6.雜項指令7.偽指令3.2 指令集介紹 ARM指令集存儲器訪問指令 ARM處理器是典型的RISC處理器,對存儲器的訪問只能使用加載和存儲指令實現(xiàn)。ARM處理器是馮諾依曼存儲結(jié)構(gòu),程序空間、RAM
18、空間及I/O映射空間統(tǒng)一編址,除對RAM操作以外,對外圍IO、程序數(shù)據(jù)的訪問均要通過加載/存儲指令進行。 存儲器訪問指令分為單寄存器操作指令和多寄存器操作指令。 LDR/STR指令用于對內(nèi)存變量的訪問、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問、查表、外圍部件的控制操作等。若使用LDR指令加載數(shù)據(jù)到PC寄存器,則實現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實現(xiàn)了程序散轉(zhuǎn)。 所有單寄存器加載/存儲指令可分為“字和無符號字節(jié)加載存儲指令和“半字和有符號字節(jié)加載存儲指令。3.2 指令集介紹 ARM存儲器訪問指令單寄存器存取3.2 指令集介紹 ARM存儲器訪問指令單寄存器存取裝載指令:LDR 目標寄存器,源地址存儲指令:STR 源寄存器,目
19、標地址存儲器源地址目標寄存器存儲器目標地址源寄存器3.2 指令集介紹 ARM存儲器訪問指令單寄存器存取裝載指令:LDR存儲指令:STRxxLDR/STR指令搭配不同的后綴實現(xiàn)不同方式的單寄存器存取操作:字/半字/字節(jié)數(shù)據(jù)控制是/否用戶模式控制無/有符號控制助記符助記符說明說明操作操作條件碼位置條件碼位置LDR Rd,addressing 加載字字數(shù)據(jù)Rdaddressing,addressing索引LDRcondLDRB Rd,addressing 加載無符號字節(jié)字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondBLDRT Rd,addressing以用戶模式用戶模式加載
20、字數(shù)據(jù)Rdaddressing,addressing索引LDRcondTLDRBT Rd, addressing 以用戶模式用戶模式加載無符號無符號字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondBTLDRH Rd, addressing 加載無符號半字無符號半字數(shù)據(jù)Rdaddressing,addressing索引LDRcondHLDRSB Rd, addressing 加載有符號字節(jié)有符號字節(jié)數(shù)據(jù)Rdaddressing,addressing索引LDRcondSBLDRSH Rd, addressing加載有符號半字有符號半字數(shù)據(jù) Rdaddressing,addr
21、essing索引 LDRcondSH ARM存儲器訪問指令裝載指令助記符助記符說明說明操作操作條件碼位置條件碼位置STR Rd, addressing 存儲字字數(shù)據(jù)addressingRd,addressing索引STRcondSTRB Rd,addressing 存儲字節(jié)字節(jié)數(shù)據(jù)addressingRd,addressing索引STRcondBSTRT Rd,addressing 以用戶模式用戶模式存儲字數(shù)據(jù)addressingRd, addressing索引STRcondTSTRBT Rd,addressing 以用戶模式用戶模式存儲字節(jié)字節(jié)數(shù)據(jù)addressingRd,addressin
22、g索引STRcondBTSTRH Rd,addressing 存儲半字半字數(shù)據(jù)addressing Rd,addressing索引STRcondH ARM存儲器訪問指令保存指令 ARM存儲器訪問指令地址形式裝載指令:LDR 目標寄存器, 源地址保存指令:STR 源寄存器, 目標地址立即數(shù):立即數(shù)可以是一個無符號的數(shù)值。這個數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。 如:LDR R1,R0,#0 x12 寄存器:寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。 如:LDR R1,R0,R2 寄存器及移位常數(shù):寄存器移位后的值可以加到基址寄存器,也可以從基址寄存
23、器中減去這個數(shù)值。 如:LDR R1,R0,R2,LSL #20 x55R2R5 0 x400000000 x123456780 x40000000存儲器地址應(yīng)用示例:LDRR2,R5 ;將R5指向地址的字數(shù)據(jù)存入R20 x12345678 ARM存儲器訪問指令單寄存器轉(zhuǎn)載應(yīng)用0 x12345678R1R2 0 x400000000 x?0 x40000004存儲器地址應(yīng)用示例:STRR1,R2,#0 x04 ;將R1的數(shù)據(jù)存儲到R0+0 x04地址0 x12345678+4 ARM存儲器訪問指令單寄存器保存應(yīng)用3.2 指令集介紹 ARM存儲器訪問指令多寄存器存取 多寄存器加載/存儲指令可以實
24、現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個寄存器;STM為存儲多個寄存器。允許一條指令傳送16個寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場保護、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。3.2 指令集介紹 ARM存儲器訪問指令多寄存器存取裝載指令:LDM 源地址,目標寄存器列表存儲指令:STM 目標地址,源寄存器列表存儲器源地址目標寄存器1目標寄存器n存儲器目標地址源寄存器1源寄存器n3.2 指令集介紹 ARM存儲器訪問指令多寄存器存取裝載指令:LDM存儲指令:STMxxLDM/STM指令搭配不同的后綴實現(xiàn)不同方式地址增長方式:IA: 每次傳送后地址加4IB: 每次傳送前地址加4DA:每
25、次傳送后地址減4DB:每次傳送前地址減40 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲器0 x010 x020 x030 x040 x40000010應(yīng)用示例:LDMIA R1!,R2-R4,R6 將R1指向的內(nèi)存數(shù)據(jù)讀取到R0-R4和R6寄存器中 ARM存儲器訪問指令多寄存器存取3.2 指令集介紹 SWP指令用于將一個內(nèi)存單元(該單元地址放在寄存器Rn中)的內(nèi)容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內(nèi)容寫入到該內(nèi)存單元中。使
26、用SWP可實現(xiàn)信號量操作。 ARM存儲器訪問指令寄存器和存儲器交換指令3.2 指令集介紹 ARM存儲器訪問指令寄存器和存儲器交換指令裝載指令:SWP 讀入寄存器,輸出寄存器,目標地址存儲器目標地址讀入寄存器輸出寄存器3.2 指令集介紹 ARM存儲器訪問指令寄存器和存儲器交換指令裝載指令:SWP 讀入寄存器,輸出寄存器,目標地址助記符助記符說明說明操作操作條件碼位置條件碼位置SWP Rd,Rm,Rn 寄存器和存儲器字字數(shù)據(jù)交換RdRn,RnRm(RnRd或Rm)SWPcondSWPB Rd,Rm,Rn 寄存器和存儲器字節(jié)字節(jié)數(shù)據(jù)交換RdRn,RnRm(RnRd或Rm)SWPcondB0 x123
27、45678R1R20 x?0 x112233440 x40000000存儲器地址R0 0 x400000003.2 指令集介紹 ARM存儲器訪問指令寄存器和存儲器交換指令應(yīng)用示例:SWPR2,R1,R0將R1的內(nèi)容與R0指向的存儲單元的內(nèi)容進行交換0 x123456780 x11223344ARM指令種類1.存儲器訪問指令2.數(shù)據(jù)處理指令3.乘法指令4.ARM分支指令5.協(xié)處理器指令6.雜項指令7.偽指令3.2 指令集介紹 ARM指令集ARM數(shù)據(jù)處理指令 數(shù)據(jù)處理指令大致可分為3類: 數(shù)據(jù)傳送指令;算術(shù)邏輯運算指令;比較指令。 數(shù)據(jù)處理指令只能對寄存器的內(nèi)容進行操作,而不能對內(nèi)存中的數(shù)據(jù)進行操
28、作。影響狀態(tài)標志。 思考與練習?1.MOV指令與LDR指令都是往目標寄存器中傳送數(shù)據(jù),但是它們有什么區(qū)別嗎? 思考與練習?1.MOV指令與LDR指令都是往目標寄存器中傳送數(shù)據(jù),但是它們有什么區(qū)別嗎? MOV指令用于將數(shù)據(jù)從一個寄存器傳送到另一個寄存器中,或者將一個常數(shù)傳送到一個寄存器中,但是不能訪問內(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é)
29、處理器指令6.雜項指令7.偽指令3.2 指令集介紹 ARM指令集程序如何跳轉(zhuǎn)在ARM中有兩種方式可以實現(xiàn)程序的跳轉(zhuǎn):1.直接向PC寄存器賦值實現(xiàn)跳轉(zhuǎn); 例: MOV PC,R142.使用分支指令直接跳轉(zhuǎn)。3.2 指令集介紹 ARM指令集分支指令程序代碼跳轉(zhuǎn)指令跳轉(zhuǎn)目標程序代碼跳轉(zhuǎn)指令跳轉(zhuǎn)目標3.2 指令集介紹 ARM指令集分支指令分支指令種類:B:分支指令BL:帶鏈接的分支指令BX:帶狀態(tài)切換的分支指令 ARM指令分支指令因為用來表示目標地址的位數(shù)有限,所以B/BL指令無法實現(xiàn)4G32位范圍內(nèi)的任意跳轉(zhuǎn)3.2 指令集介紹程序代碼B mainxxmain ARM指令集分支指令程序代碼BL Lab
30、elxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC ARM指令分支指令 帶鏈接的分支指令BL指令除了具有跳轉(zhuǎn)功能,還能在跳轉(zhuǎn)之前將下一條指令的地址拷貝到R14(即LR) 鏈接寄存器中,它適用于子程序調(diào)用。跳轉(zhuǎn)范圍限制在當前指令的32M字節(jié)地址內(nèi)。指令格式如下:Addr1LabelAddr2Addr21.當程序執(zhí)行到BL跳轉(zhuǎn)指令時,硬件將下一條指令的地址Addr2裝入LR寄存器,并把跳轉(zhuǎn)地址裝入程序計數(shù)器PC)2. 程序跳轉(zhuǎn)到目標地址Label繼續(xù)執(zhí)行,當子程序執(zhí)行結(jié)束后,將LR寄存器內(nèi)容存入PC,返回調(diào)用函數(shù)繼續(xù)執(zhí)行例如: BL DelayNS;調(diào)用子程
31、序DelayNS ARM指令分支指令 帶狀態(tài)切換的分支指令BX指令除了具有跳轉(zhuǎn)功能,還能在跳轉(zhuǎn)的同時切換處理器狀態(tài)。其跳轉(zhuǎn)范圍不受限制。指令格式如下:最低位為1?YN切換到Thumb狀態(tài)切換到ARM狀態(tài) ARM指令分支指令 帶狀態(tài)切換的分支指令BX指令除了具有跳轉(zhuǎn)功能,還能在跳轉(zhuǎn)的同時切換處理器狀態(tài)。其跳轉(zhuǎn)范圍不受限制。指令格式如下:例如:ADRL R0,T_Fun+1 ;將Thumb程序的入口地址加1存入R0BXR0 ; 跳轉(zhuǎn)到R0指定的地址, ;并根據(jù)R0的最低位來切換處理器狀態(tài)ARM指令種類1.存儲器訪問指令2.數(shù)據(jù)處理指令3.乘法指令4.ARM分支指令5.協(xié)處理器指令6.雜項指令7.偽
32、指令A(yù)RM指令種類1.存儲器訪問指令2.數(shù)據(jù)處理指令3.乘法指令4.ARM分支指令5.協(xié)處理器指令6.雜項指令7.偽指令 在ARM指令集中雜項指令共有3條,它們非常重要,特別是與操作系統(tǒng)的使用息息相關(guān):1.軟件中斷產(chǎn)生指令:SWI2. 程序狀態(tài)寄存器讀指令:MRS3. 程序狀態(tài)寄存器寫指令:MSR3.2 指令集介紹 ARM指令集雜項指令3.2 指令集介紹 ARM指令集軟中斷指令 SWI指令用于產(chǎn)生軟中斷,主要用于用戶程序調(diào)用操作系統(tǒng)的系統(tǒng)服務(wù)。執(zhí)行該指令后,處理器將完成以下動作:1. 切換到管理模式2. 將CPSR備份到管理模式下的SPSR寄存器3. 程序跳轉(zhuǎn)到軟件中斷入口用戶模式管理模式任務(wù)
33、1任務(wù)2其它代碼功能1:打開中斷功能2:關(guān)閉中斷功能n:任務(wù)調(diào)度CPSR寄存器SPSR寄存器1.使用操作系統(tǒng)后,為了防止出錯的任務(wù)影響其它任務(wù)的執(zhí)行,通常將任務(wù)放在用戶模式執(zhí)行,以限制其權(quán)限;2.對于一些重要的操作,如中斷的開關(guān),必須由操作系統(tǒng)完成。使用軟件中斷指令即可完成系統(tǒng)功能調(diào)用; ARM雜項指令軟中斷指令3.2 指令集介紹 ARM指令集軟中斷指令 SWI指令格式如下所示: 可以利用指令中的這個24位立即數(shù)向軟中斷服務(wù)程序傳遞參數(shù),比如請求的服務(wù)類型 ARM雜項指令軟中斷指令 根據(jù)SWI指令傳遞的參數(shù)SWI異常處理程序可以作出相應(yīng)的處理。SWI指令傳遞參數(shù)有以下兩種方法,指令中的24位立
34、即數(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,#34;設(shè)置子功能號為34 SWI 0 ARM雜項指令軟中斷指令 在SWI異常中斷處理程序中,取出SWI指令中立即數(shù)的步驟為:首先確定引起軟中斷的SWI指令是ARM指令還是Thumb指令,這可通過對SPSR訪問得到;然后取得該SWI指令的地址,這可通過訪問LR寄存器得到;接著讀出該SWI指令,分解出立即數(shù)。 SWI
35、_Handler STMFD SP!, R0-R3, R12, LR; 現(xiàn)場保護 MRS R0, SPSR ; 讀取SPSR STMFD SP!, R0 ; 保存SPSR TST R0, #0 x20 ; 測試T標志位 LDRNEH R0, LR,#-2 ; 若是Thumb指令,讀取指令碼(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
36、; SWI異常中斷返回 3.2 指令集介紹 ARM指令集狀態(tài)寄存器讀指令 在ARM處理器中,只有MRS指令可以對狀態(tài)寄存器CPSR和SPSR進行讀操作。通過讀CPSR可以了解當前處理器的工作狀態(tài)。讀SPSR寄存器可以了解到進入異常前的處理器狀態(tài)。指令格式如下所示:目標寄存器3.2 指令集介紹 ARM指令集狀態(tài)寄存器寫指令例如,將R0的內(nèi)容寫入CPSR寄存器的控制位域MSR CPSR_c,R0條件代碼標志保管控制位域Byte0Byte3, Byte2, Byte1R0CPSRNZCV IM0M1M2M3M4TF. . .31 30 29 28 27 26 8 7 6 5 4 3 2 1 0Byte0 ARM雜項指令狀態(tài)寄存器寫指令啟動代碼堆棧初始化應(yīng)用示例: INITSTACKMOV R0,LR;設(shè)置管理模式堆棧MSR CPSR_C,#0 xD3LDR SP,StackSvc;設(shè)置中斷模式堆棧MSR CPSR_C,#0 xD2LDR SP,StackIrq.模式位狀態(tài)位IRQ禁止位FIQ禁止位NZCVIFT M4 M3 M2 M1 M031 30 29 28 27 2676543210配置值0 xD211010010禁止FI
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 船舶安全操作與應(yīng)急處理
- 2025年度拆遷個人房屋拆除與補償合同執(zhí)行規(guī)范4篇
- 2025年度食品代理采購安全協(xié)議范本4篇
- 二零二五年度分公司成立與環(huán)保合規(guī)管理合作協(xié)議4篇
- 2025年度出租車承包經(jīng)營合同標準化大全4篇
- 2025年銷售渠道合伙人聘用合作協(xié)議3篇
- 2025年度電子信息產(chǎn)業(yè)廠址租賃及研發(fā)生產(chǎn)合同4篇
- 二零二五年度廢棄化工儲油罐拆除項目環(huán)保安全合同4篇
- 二零二五年度洗浴場所安全管理及應(yīng)急預(yù)案合同3篇
- 2025年度承諾合同模板:影視制作與發(fā)行合同4篇
- 深圳2024-2025學(xué)年度四年級第一學(xué)期期末數(shù)學(xué)試題
- 中考語文復(fù)習說話要得體
- 《工商業(yè)儲能柜技術(shù)規(guī)范》
- 華中師范大學(xué)教育技術(shù)學(xué)碩士研究生培養(yǎng)方案
- 醫(yī)院醫(yī)學(xué)倫理委員會章程
- xx單位政務(wù)云商用密碼應(yīng)用方案V2.0
- 風浪流耦合作用下錨泊式海上試驗平臺的水動力特性試驗
- 高考英語語法專練定語從句含答案
- 有機農(nóng)業(yè)種植技術(shù)操作手冊
- 【教案】Unit+5+Fun+Clubs+大單元整體教學(xué)設(shè)計人教版(2024)七年級英語上冊
- 2024-2025學(xué)年四年級上冊數(shù)學(xué)人教版期末測評卷(含答案)
評論
0/150
提交評論