嵌入式開發(fā)ch3.ppt_第1頁
嵌入式開發(fā)ch3.ppt_第2頁
嵌入式開發(fā)ch3.ppt_第3頁
嵌入式開發(fā)ch3.ppt_第4頁
嵌入式開發(fā)ch3.ppt_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1,第三章 ARM尋址方式與指令系統(tǒng),本章主要內(nèi)容: ARM編程模型 ARM指令格式和尋址方式 ARM指令集 Thumb指令集,2,機(jī)器指令、偽指令和宏指令,機(jī)器指令能被處理器直接執(zhí)行,而偽指令宏和宏指令不能。機(jī)器指令包括ARM指令集和Thumb指令集 ; 偽指令是在源程序匯編期間,由匯編編譯器處理。其作用是為匯編程序完成準(zhǔn)備工作; 宏指令在程序中用于調(diào)用宏,宏是一段獨(dú)立的程序代碼;在程序匯編時(shí),對宏調(diào)用進(jìn)行展開,用宏體代替宏指令。,3,ARM處理器模式,除用戶模式之外的其余6種稱為非用戶模式,或特權(quán)模式(Privileged Modes);而特權(quán)模式中,除系統(tǒng)模式之外的其余5種又稱為異常模式

2、(Exception Modes),不同的工作模式間可以相互切換。,4,處理器的工作狀態(tài),ARM狀態(tài):處理器執(zhí)行32位的arm指令集時(shí),工作在此狀態(tài); Thumb狀態(tài):處理器執(zhí)行16位的thumb指令集時(shí),工作在此狀態(tài)。,5,ARM的寄存器組織,6,ARM的寄存器組織 ,1.通用寄存器:包括R0R15,以及程序計(jì)數(shù)器PC . R0R7稱為不分組寄存器; R8R12有兩組物理寄存器。一組屬于快速模式(R8_fiqR12_fiq),另一組屬于其它模式(R8_usrR12_usr) ; R13和R14有6組物理寄存器。其中用戶模式和系統(tǒng)模式共用一組 。寄存器R13通常作為堆棧指針(SP) ,寄存器R

3、14常用作連接寄存器(LR); 寄存器R15,又稱為PC,7,ARM的寄存器組織 (1),2.狀態(tài)寄存器: 當(dāng)前程序狀態(tài)寄存器 CPSR,可以在任何工作模式下被訪問; 程序狀態(tài)備份寄存器SPSR,只有在異常模式下,才能被訪問 ;,8,ARM的寄存器組織 (2),條件標(biāo)志位,9,ARM的寄存器組織 (3),控制位,10,異常中斷,異常中斷是指處理器由于外部或內(nèi)部的原因,停止執(zhí)行當(dāng)前任務(wù),轉(zhuǎn)而處理特定的事件,處理完后返回原程序,繼續(xù)執(zhí)行。,11,異常中斷(1),例子: 1.整個(gè)地址空間的起始位置(地址0 x00000000開始)有以下指令,一旦發(fā)生外部中斷請求,處理器首先自動(dòng)保存當(dāng)前狀態(tài)(PC-R

4、14,CPSR-SPSR),進(jìn)入外部中斷模式,接著執(zhí)行地址0 x00000018處的指令,即b IRQ_SVC_HANDLER跳轉(zhuǎn)到標(biāo)號(hào)IRQ_SVC_HANDLER處開始執(zhí)行。 bSYS_RST_HANDLER;對0 x00000000 bUDF_INS_HANDLER;0 x00000004 bSWI_SVC_HANDLER;應(yīng)0 x00000008 bINS_ABT_HANDLER;0 x0000000c bDAT_ABT_HANDLER;地0 x00000010 b.; bIRQ_SVC_HANDLER;址0 x00000018 bFIQ_SVC_HANDLER;0 x0000001c

5、,12,異常中斷(2),2. IRQ_SVC_HANDLER處的代碼為: IRQ_SVC_HANDLER sublr, lr, #4 stmfdsp!, r0-r3, lr ldrr0, =IRQ_SVC_Vector ldrpc, r0 處理器將通用寄存器和返回地址壓入堆棧,接著跳轉(zhuǎn)到外部中斷請求的中斷服務(wù)程序中。IRQ_SVC_Vector為外部中斷請求的中斷向量。,13,ARM指令的編碼格式,14,ARM指令的助記符,ARM指令在匯編程序中用助記符表示,一般ARM指令的助記符格式為: S , 其中: 操作碼,如ADD表示算術(shù)加操作指令; 決定指令執(zhí)行的條件域; S 決定指令執(zhí)行是否影響C

6、PSR寄存器的值; 目的寄存器; 第一個(gè)操作數(shù),為寄存器; 第二個(gè)操作數(shù)。,15,條件域,16,尋址方式,立即數(shù)尋址 寄存器尋址 寄存器移位尋址 寄存器間接尋址 基址變址尋址 相對尋址 多寄存器尋址 塊拷貝尋址 堆棧尋址,17,立即數(shù)尋址,在立即數(shù)尋址中,操作數(shù)本身直接在指令中給出,取出指令也就獲得了操作數(shù),這個(gè)操作數(shù)也稱為立即數(shù)。例: ADD R0,R1,5; R0=R15 MOV R0,0 x55; R0=0 x55 其中:操作數(shù)5,0 x55就是立即數(shù),立即數(shù)在指令中要以“”為前綴,后面跟實(shí)際數(shù)值。,18,寄存器尋址,在寄存器尋址方式下,寄存器的值即為操作數(shù)。ARM指令普遍采用此種尋址方

7、式。例: ADD R0,R1,R2; R0=R1R2 MOV R0,R1; R0=R1,19,寄存器移位尋址,寄存器移位尋址的操作數(shù)由寄存器的數(shù)值做相應(yīng)移位而得到;移位的方式在指令中以助記符的形式給出,而移位的位數(shù)可用立即數(shù)或寄存器尋址方式表示。例: ADD R0,R1,R2,ROR 5;R0=R1R2循環(huán)右移5位 MOV R0,R1,LSL R3; R0=R1邏輯左移R3位 移位操作在ARM指令集中不作為單獨(dú)的指令使用,ARM指令集共有5種位移操作。,20,寄存器移位尋址 ,LSL邏輯左移 :Rx,LSL LSR邏輯右移 : Rx,LSR ASR算術(shù)右移 :Rx,ASR ROR循環(huán)右移 :R

8、x,ROR RRX帶擴(kuò)展的循環(huán)右移:Rx,RRX,21,寄存器間接尋址,寄存器中的值為操作數(shù)的物理地址,而實(shí)際的操作數(shù)存放在存儲(chǔ)器中。例: STR R0,R1;R1=R0 LDR R0,R1;R0=R1,22,基址變址尋址,將寄存器(稱為基址寄存器)的值與指令中給出的偏移地址量相加,所得結(jié)果作為操作數(shù)的物理地址。例: LDR R0,R1,5;R0=R1+5 LDR R0,R1,R2;R0=R1+R2,23,相對尋址,相對尋址同基址變址尋址相似,區(qū)別只是將程序計(jì)數(shù)器PC作為基址寄存器,指令中的標(biāo)記作為地址偏移量。例: BEQ process1 process1: ,24,多寄存器尋址,在多寄存器

9、尋址方式中,一條指令可實(shí)現(xiàn)一組寄存器值的傳送。連續(xù)的寄存器間用“”連接,否則用“,”分隔。例: LDMIA R0,R1-R5; R1=R0,R2=R0+4,R3=R0+8 R4=R0+12,R5=R0+16 指令中IA表示在執(zhí)行完一次Load操作后,R0自增4。該指令將以R0為起始地址的5個(gè)字?jǐn)?shù)據(jù)分別裝入R1,R2,R3,R4,R5中。,25,塊拷貝尋址,塊拷貝尋址可實(shí)現(xiàn)連續(xù)地址數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。例: LDMIA R0,R1-R5; STMIA R1,R1-R5; 第一條指令從以R0的值為起始地址的存儲(chǔ)單元中取出5個(gè)字的數(shù)據(jù),第二條指令將取出的數(shù)據(jù)存入以R1的值為起始地址的

10、存儲(chǔ)單元中。,26,堆棧尋址,堆棧尋址用于數(shù)據(jù)棧與寄存器組之間批量數(shù)據(jù)傳輸。當(dāng)數(shù)據(jù)寫入和讀出內(nèi)存的順序不同時(shí),使用堆棧尋址可以很好的解決這問題。例: STMFD R13!,R0,R1,R2,R3,R4; LDMFD R13!,R0,R1,R2,R3,R4 第一條指令,將R0R4中的數(shù)據(jù)壓入堆棧,R13為堆棧指針; 第二條指令,將數(shù)據(jù)出棧,恢復(fù)R0R4原先的值。,27,ARM指令集,數(shù)據(jù)處理指令; 跳轉(zhuǎn)指令; Load/Store指令; 程序狀態(tài)寄存器指令; 協(xié)處理器指令; 軟件中斷指令,28,數(shù)據(jù)處理指令,1. MOV數(shù)據(jù)傳送指令: MOVS ,; 2.MVN數(shù)據(jù)取反傳送指令: MVNS ,;

11、 3. ADD加法指令: ADDS ,; 4. ADC帶進(jìn)位加法指令: ADCS ,;,29,數(shù)據(jù)處理指令,5. SUB減法指令: SUBS ,; 6. RSB反向減法指令: RSBS ,; 7. SBC帶借位減法指令: SBCS ,; 8. RSC帶借位的反向減法指令: RSCS ,;,30,數(shù)據(jù)處理指令,9 MUL 32位乘法指令: MULS ,; 10MLA 32位乘加指令: MLAS ,; 11. SMULL 64位有符號(hào)數(shù)乘法指令 : SMULLS ,; 12SMLAL 64位有符號(hào)數(shù)乘加指令: SMLALS ,;,31,數(shù)據(jù)處理指令,13UMULL 64位無符號(hào)數(shù)乘法指令: UMU

12、LLS ,; 14UMLAL 64位無符號(hào)數(shù)乘加指令: UMLAL S ,; 15AND邏輯與指令: ANDS ,; 16ORR邏輯或指令: ORRS ,;,32,數(shù)據(jù)處理指令,17. EOR邏輯異或指令: EORS ,; 18BIC位清除指令: BICS ,; 19CMP比較指令: CMP ,; 20CMN反值比較指令: CMN ,;,33,數(shù)據(jù)處理指令,21TST位測試指令: TST ,; 22TEQ相等測試指令: TEQ ,;,34,跳轉(zhuǎn)指令,跳轉(zhuǎn)指令用于實(shí)現(xiàn)程序的跳轉(zhuǎn)和程序狀態(tài)的切換。在ARM程序設(shè)計(jì)中,有兩種方式可實(shí)現(xiàn)程序的跳轉(zhuǎn):一種是跳轉(zhuǎn)指令,另一種是直接向程序寄存器PC(R15)

13、中寫入目標(biāo)地址值。 通過向程序計(jì)數(shù)器PC寫入跳轉(zhuǎn)地址值,可以實(shí)現(xiàn)在4GB的地址空間中的任意跳轉(zhuǎn),而使用跳轉(zhuǎn)指令,其跳轉(zhuǎn)空間受到限制。,35,跳轉(zhuǎn)指令,1. B跳轉(zhuǎn)指令: B ; 功能:B是最簡單的跳轉(zhuǎn)指令。遇到一個(gè)B指令,ARM處理器將立即跳轉(zhuǎn)到給定的地址addr,從那里繼續(xù)執(zhí)行。addr的值是相對當(dāng)前PC(即寄存器R15)的值的一個(gè)偏移量。 2. BL帶返回的跳轉(zhuǎn)指令: BL ; 功能:同B指令,但BL指令執(zhí)行跳轉(zhuǎn)操作的同時(shí),還將PC(寄存器R15)的值保存到LR寄存器(寄存器R14)中。該指令用于實(shí)現(xiàn)子程序調(diào)用 。,36,跳轉(zhuǎn)指令,3BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令: BLX ;或BLX

14、; 功能:處理器跳轉(zhuǎn)到目標(biāo)地址處,從那繼續(xù)執(zhí)行,并將PC(寄存器R15)的值保存到LR寄存器(寄存器R14)中。目標(biāo)地址存放在寄存器Rn中或?yàn)榻o定的地址addr;如果目標(biāo)地址處為Thumb指令,則程序狀態(tài)從ARM狀態(tài)切換為Thumb狀態(tài)。該指令用于子程序調(diào)用和程序狀態(tài)的切換 。,37,跳轉(zhuǎn)指令,4BX帶狀態(tài)切換的跳轉(zhuǎn)指令: BX ; 功能:處理器跳轉(zhuǎn)到目標(biāo)地址處,從那繼續(xù)執(zhí)行;目標(biāo)地址為寄存器Rn的值和0 xFFFFFFFE做與操作的結(jié)果。目標(biāo)地址處的指令可以是ARM指令,也可以是Thumb指令。,38,Load/Store指令,Load/Store指令用于寄存器和內(nèi)存間數(shù)據(jù)的傳送,Load用

15、于把內(nèi)存中的數(shù)據(jù)裝載到寄存器中,而Store則用于把寄存器中的數(shù)據(jù)存入內(nèi)存。 Load/Store指令分為三類: 單一數(shù)據(jù)傳送指令(LDR和STR等); 多數(shù)據(jù)傳送指令(LDM和STM); 數(shù)據(jù)交換指令(SWP和SWPB)。,39,Load/Store指令,1LDR字?jǐn)?shù)據(jù)加載指令: LDR ,; 2. LDRB字節(jié)數(shù)據(jù)加載指令: LDRB ,; 3LDRBT 用戶模式的字節(jié)數(shù)據(jù)加載指令: LDRBT , 4LDRH半字?jǐn)?shù)據(jù)加載指令: LDRH ,;,40,Load/Store指令,5LDRSB有符號(hào)的字節(jié)數(shù)據(jù)加載指令: LDRSB ,; 6LDRSH有符號(hào)的半字?jǐn)?shù)據(jù)加載指令: LDRSH ,;

16、 7LDRT用戶模式的字?jǐn)?shù)據(jù)加載指令: LDRT ,; 8. STR字?jǐn)?shù)據(jù)存儲(chǔ)指令: STR ,;,41,Load/Store指令,9. STRB字節(jié)數(shù)據(jù)存儲(chǔ)指令: STRB ,; 10. STRBT用戶模式的字節(jié)數(shù)據(jù)存儲(chǔ)指令: STRBT ,; 11. STRH半字?jǐn)?shù)據(jù)存儲(chǔ)指令: STRH ,; 12. STRT用戶模式的字?jǐn)?shù)據(jù)存儲(chǔ)指令: STRT ,;,42,Load/Store指令,13. LDM批量數(shù)據(jù)加載指令: LDM !,; 14. STM批量數(shù)據(jù)存儲(chǔ)指令: STM !,; 15. SWP字?jǐn)?shù)據(jù)交換指令: SWP ,; 16. SWPB字節(jié)數(shù)據(jù)交換指令: SWPB ,;,43,程序

17、狀態(tài)寄存器指令,用于狀態(tài)寄存器和通用寄存器間傳送數(shù)據(jù),有兩條指令:MRS和MSR,兩者結(jié)合可用來修改程序狀態(tài)寄存器的值。 1.MRS程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令: MRS ,CPSR/SPSR; 功能:用于將程序狀態(tài)寄存器的內(nèi)容傳送到目標(biāo)寄存器Rd中。 2.MRS通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令: MRS CPSR/SPSR_,; 功能:用于將寄存器Rd的值傳送到程序狀態(tài)寄存器中。,44,協(xié)處理器指令,ARM處理器最多可支持16個(gè)協(xié)處理器,用于輔助ARM完成各種協(xié)處理操作。在程序執(zhí)行過程中,各協(xié)處理器只執(zhí)行自身的協(xié)處理指令,而忽略屬于ARM處理器和其他協(xié)處理器的指令。ARM

18、協(xié)處理器指令可分為3類: ARM處理器用于初始化協(xié)處理器的數(shù)據(jù)操作指令(CDP); 協(xié)處理器寄存器和內(nèi)存單元之間的數(shù)據(jù)傳送指令(LDC,STC); ARM處理器寄存器和協(xié)處理器寄存器之間的數(shù)據(jù)傳送指令(MCR,MRC),45,協(xié)處理器指令,1. CDP協(xié)處理器數(shù)操作指令: CDP ,; 功能:用于傳遞指令給協(xié)處理器p,要求其在寄存器CRn和CRm上,進(jìn)行操作opcode1,并把結(jié)果存放到CRd中,可以使用opcode2提供與操作有關(guān)的補(bǔ)充信息。指令中的所有寄存器均為協(xié)處理器的寄存器,操作由協(xié)處理器完成。,46,協(xié)處理器指令,2LDC協(xié)處理器數(shù)據(jù)讀取指令: LDCL ,; 功能:將addr表示的內(nèi)存地址中的連續(xù)數(shù)據(jù)傳送到目的寄存器CRd中。L表示指令為長讀取操作,比如用于雙精度數(shù)據(jù)的傳輸;目的寄存器CRd為協(xié)處理器的寄存器;addr的尋址方式同LDR指令,其寄存器為ARM處理器的寄存器。 3STC協(xié)處理器數(shù)據(jù)存儲(chǔ)指令: STCL ,; 功能:將寄存器CRd的值傳送到addr表示的內(nèi)存地址中。指令中各參數(shù)用法同LDC指令。,47,協(xié)處理器指令,4MCR ARM處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令: MCR ,,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論