ARM尋址方式和指令格式PPT教學課件_第1頁
ARM尋址方式和指令格式PPT教學課件_第2頁
ARM尋址方式和指令格式PPT教學課件_第3頁
ARM尋址方式和指令格式PPT教學課件_第4頁
ARM尋址方式和指令格式PPT教學課件_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 ARM處理器模式 除用戶模式之外的其余6種稱為非用戶模式,或特權模式(Privileged Modes);而特權模式中,除系統(tǒng)模式之外的其余5種又稱為異常模式(Exception Modes),不同的工作模式間可以相互切換。 工作模式功能M4:0用戶模式(usr)正常的程序執(zhí)行狀態(tài)10000快速中斷模式(fiq)用于高速數(shù)據(jù)傳輸或通道處理10001外部中斷模式(irq)用于通用的中斷處理10010管理模式(svc)操作系統(tǒng)的保護模式10011中止模式(abt)用于虛擬存儲及存儲保護10111未定義指令模式(und)用于支持硬件協(xié)處理器的軟件仿真11011系統(tǒng)模式(sys)運行特權級的操作系

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

3、器(LR);寄存器R15,又稱為PC 第4頁/共55頁5 ARM的寄存器組織 (1)2.狀態(tài)寄存器:當前程序狀態(tài)寄存器 CPSR,可以在任何工作模式下被訪問;程序狀態(tài)備份寄存器SPSR,只有在異常模式下,才能被訪問 ; 第5頁/共55頁6 ARM的寄存器組織 (2)條件標志位標志位含 義N當兩個補碼表示的帶符號數(shù)運算時,N=1 表示運算的結果為負數(shù);N=0 表示運算的結果為正數(shù)或零;ZZ=1 表示運算的結果為零;Z=0表示運算的結果不為零;C有3種情況會改變C的值:加法運算(包括比較指令CMN):當運算結果產生了進位時(無符號數(shù)上溢出),C=1,否則C=0。減法運算(包括比較指令CMP):當運

4、算時產生了借位(無符號數(shù)下溢出),C=0,否則C=1。對于包含移位操作的非加/減運算指令,C為移出值的最后一位。V對于加/減法運算指令,當操作數(shù)和運算結果為二進制的補碼表示的帶符號數(shù)時,V=1表示符號位溢出。Q在ARM v5及以上版本的E系列處理器中,用Q標志位指示增強的DSP運算指令是否發(fā)生了溢出。第6頁/共55頁7 ARM的寄存器組織 (3)控制位標志位含義II1,表示禁止IRQ中斷;否則,表示允許IRQ中斷FF1,表示禁止FIQ中斷;否則,表示允許FIQ中斷T對于ARM v4以上版本的T系列處理器,T0,表示執(zhí)行ARM指令,否則,表示執(zhí)行Thumb指令;對于ARM v5以上版本的非T系列

5、處理器,T0,表示指令ARM指令,否則,表示強制下一條執(zhí)行的指令產生未定義指令中斷。M4:0M4:0處理器工作模式可訪問的寄存器10000用戶模式PC,R0R14,CPSR10001快速中斷模式PC,R0R7,R8_fiqR14_fiq,CPSR,SPSR_fiq10010外部中斷模式PC,R0R12,R13_irqR14_irq,CPSR,SPSR_irq10011管理模式PC,R0R12,R13_svcR14_svc,CPSR,SPSR_svc10111中止模式PC,R0R12,R13_abtR14_abt,CPSR,SPSR_abt11011未定義指令模式PC,R0R12,R13_und

6、R14_und,CPSR,SPSR_und11111系統(tǒng)模式PC,R0R14,CPSR第7頁/共55頁8 異常中斷 異常中斷是指處理器由于外部或內部的原因,停止執(zhí)行當前任務,轉而處理特定的事件,處理完后返回原程序,繼續(xù)執(zhí)行。 異常類型工作模式特定地址(低端)特定地址(高端)優(yōu)先級復位管理模式0 x000000000 xFFFF00001未定義指令未定義指令中止模式0 x000000040 xFFFF00046軟件中斷(SWI)管理模式0 x000000080 xFFFF00086指令預取中止中止模式0 x0000000C0 xFFFF000C5數(shù)據(jù)訪問中止中止模式0 x000000100 xF

7、FFF00102外部中斷請求(IRQ)外部中斷模式0 x000000180 xFFFF00184快速中斷請求(FIQ)快速中斷模式0 x0000001C0 xFFFF001C3第8頁/共55頁9 異常中斷(1)例子: 1.整個地址空間的起始位置(地址0 x00000000開始)有以下指令,一旦發(fā)生外部中斷請求,處理器首先自動保存當前狀態(tài)(PC-R14,CPSR-SPSR),進入外部中斷模式,接著執(zhí)行地址0 x00000018處的指令,即b IRQ_SVC_HANDLER跳轉到標號IRQ_SVC_HANDLER處開始執(zhí)行。 bSYS_RST_HANDLER;對0 x00000000bUDF_IN

8、S_HANDLER;0 x00000004bSWI_SVC_HANDLER;應0 x00000008bINS_ABT_HANDLER;0 x0000000cbDAT_ABT_HANDLER;地0 x00000010b.;bIRQ_SVC_HANDLER;址0 x00000018bFIQ_SVC_HANDLER;0 x0000001c 第9頁/共55頁10 異常中斷(2) 2. IRQ_SVC_HANDLER處的代碼為: IRQ_SVC_HANDLERsub lr, lr, #4stmfdsp!, r0-r3, lrldrr0, =IRQ_SVC_Vectorldrpc, r0 處理器將通用寄存

9、器和返回地址壓入堆棧,接著跳轉到外部中斷請求的中斷服務程序中。IRQ_SVC_Vector為外部中斷請求的中斷向量。第10頁/共55頁11 ARM指令的編碼格式 3128272524212019161512110cond opcodeSRnRdop200000010100100010000000000000010第11頁/共55頁12 ARM指令的助記符 ARM指令在匯編程序中用助記符表示,一般ARM指令的助記符格式為: S , 其中: 操作碼,如ADD表示算術加操作指令; 決定指令執(zhí)行的條件域;S 決定指令執(zhí)行是否影響CPSR寄存器的值; 目的寄存器; 第一個操作數(shù),為寄存器; 第二個操作數(shù)

10、。第12頁/共55頁13 條件域condCPSR中標志位含 義EQZ置位相等NEZ清零不相等CSC置位無符號數(shù)大于或等于CCC清零無符號數(shù)小于MIN置位負數(shù)PLN清零正數(shù)或零VSV置位溢出VCV清零未溢出HIC置位Z清零無符號數(shù)大于LSC清零Z置位無符號數(shù)小于或等于GEN等于V帶符號數(shù)大于或等于LTN不等于V帶符號數(shù)小于GTZ清零且(N等于V)帶符號數(shù)大于LEZ置位或(N不等于V)帶符號數(shù)小于或等于AL忽略無條件執(zhí)行第13頁/共55頁14 尋址方式 立即數(shù)尋址寄存器尋址寄存器移位尋址寄存器間接尋址 基址變址尋址相對尋址 多寄存器尋址 塊拷貝尋址 堆棧尋址 第14頁/共55頁15 立即數(shù)尋址 在

11、立即數(shù)尋址中,操作數(shù)本身直接在指令中給出,取出指令也就獲得了操作數(shù),這個操作數(shù)也稱為立即數(shù)。例: ADD R0,R1,5; R0=R15 MOV R0,0 x55; R0=0 x55 其中:操作數(shù)5,0 x55就是立即數(shù),立即數(shù)在指令中要以“”為前綴,后面跟實際數(shù)值。 第15頁/共55頁16 寄存器尋址 在寄存器尋址方式下,寄存器的值即為操作數(shù)。ARM指令普遍采用此種尋址方式。例: ADD R0,R1,R2; R0=R1R2 MOV R0,R1; R0=R1第16頁/共55頁17 寄存器移位尋址 寄存器移位尋址的操作數(shù)由寄存器的數(shù)值做相應移位而得到;移位的方式在指令中以助記符的形式給出,而移位

12、的位數(shù)可用立即數(shù)或寄存器尋址方式表示。例:ADD R0,R1,R2,ROR 5;R0=R1R2循環(huán)右移5位MOV R0,R1,LSL R3; R0=R1邏輯左移R3位 移位操作在ARM指令集中不作為單獨的指令使用,ARM指令集共有5種位移操作。第17頁/共55頁18 寄存器移位尋址 LSL邏輯左移 :Rx,LSL LSR邏輯右移 : Rx,LSR ASR算術右移 :Rx,ASR ROR循環(huán)右移 :Rx,ROR RRX帶擴展的循環(huán)右移:Rx,RRX 第18頁/共55頁19 寄存器間接尋址 寄存器中的值為操作數(shù)的物理地址,而實際的操作數(shù)存放在存儲器中。例: STR R0,R1;R1=R0 LDR

13、R0,R1;R0=R1第19頁/共55頁20 基址變址尋址 將寄存器(稱為基址寄存器)的值與指令中給出的偏移地址量相加,所得結果作為操作數(shù)的物理地址。例: LDR R0,R1,5;R0=R1+5 LDR R0,R1,R2; R0=R1+R2第20頁/共55頁21 相對尋址 相對尋址同基址變址尋址相似,區(qū)別只是將程序計數(shù)器PC作為基址寄存器,指令中的標記作為地址偏移量。例: BEQ process1 process1: 第21頁/共55頁22 多寄存器尋址 在多寄存器尋址方式中,一條指令可實現(xiàn)一組寄存器值的傳送。連續(xù)的寄存器間用“”連接,否則用“,”分隔。例: LDMIA R0,R1-R5; R

14、1=R0,R2=R0+4,R3=R0+8 R4=R0+12,R5=R0+16 指令中IA表示在執(zhí)行完一次Load操作后,R0自增4。該指令將以R0為起始地址的5個字數(shù)據(jù)分別裝入R1,R2,R3,R4,R5中。第22頁/共55頁23 塊拷貝尋址 塊拷貝尋址可實現(xiàn)連續(xù)地址數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。例: LDMIA R0,R1-R5; STMIA R1,R1-R5; 第一條指令從以R0的值為起始地址的存儲單元中取出5個字的數(shù)據(jù),第二條指令將取出的數(shù)據(jù)存入以R1的值為起始地址的存儲單元中。第23頁/共55頁24 堆棧尋址 堆棧尋址用于數(shù)據(jù)棧與寄存器組之間批量數(shù)據(jù)傳輸。當數(shù)據(jù)寫入和讀出內存的

15、順序不同時,使用堆棧尋址可以很好的解決這問題。例: STMFD R13!,R0,R1,R2,R3,R4; LDMFD R13!,R0,R1,R2,R3,R4 第一條指令,將R0R4中的數(shù)據(jù)壓入堆棧,R13為堆棧指針; 第二條指令,將數(shù)據(jù)出棧,恢復R0R4原先的值。第24頁/共55頁25 ARM指令集 數(shù)據(jù)處理指令; 跳轉指令; Load/Store指令; 程序狀態(tài)寄存器指令; 協(xié)處理器指令; 軟件中斷指令 第25頁/共55頁26 數(shù)據(jù)處理指令1. MOV數(shù)據(jù)傳送指令: MOVS ,; 2. MVN數(shù)據(jù)取反傳送指令: MVNS ,;3. ADD加法指令: A D D S ,; 4. ADC帶進位

16、加法指令: ADCS ,; 第26頁/共55頁27 數(shù)據(jù)處理指令5. SUB減法指令: SUBS ,;6. RSB反向減法指令: RSBS ,;7. SBC帶借位減法指令: SBCS ,;8. RSC帶借位的反向減法指令: RSCS ,;第27頁/共55頁28 數(shù)據(jù)處理指令9 MUL 32位乘法指令: MULS ,;10MLA 32位乘加指令: MLAS ,;11. SMULL 64位有符號數(shù)乘法指令 : SMULLS ,;12SMLAL 64位有符號數(shù)乘加指令: SMLALS ,;第28頁/共55頁29 數(shù)據(jù)處理指令13UMULL 64位無符號數(shù)乘法指令: UMULLS ,;14UMLAL

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

18、C(R15)中寫入目標地址值。 通過向程序計數(shù)器PC寫入跳轉地址值,可以實現(xiàn)在4GB的地址空間中的任意跳轉,而使用跳轉指令,其跳轉空間受到限制。 第32頁/共55頁33 跳轉指令1. B跳轉指令: B ; 功能:B是最簡單的跳轉指令。遇到一個B指令,ARM處理器將立即跳轉到給定的地址addr,從那里繼續(xù)執(zhí)行。addr的值是相對當前PC(即寄存器R15)的值的一個偏移量。2. BL帶返回的跳轉指令: BL ; 功能:同B指令,但BL指令執(zhí)行跳轉操作的同時,還將PC(寄存器R15)的值保存到LR寄存器(寄存器R14)中。該指令用于實現(xiàn)子程序調用 。第33頁/共55頁34 跳轉指令3BLX帶返回和狀

19、態(tài)切換的跳轉指令: BLX ;或BLX ; 功能:處理器跳轉到目標地址處,從那繼續(xù)執(zhí)行,并將PC(寄存器R15)的值保存到LR寄存器(寄存器R14)中。目標地址存放在寄存器Rn中或為給定的地址addr;如果目標地址處為Thumb指令,則程序狀態(tài)從ARM狀態(tài)切換為Thumb狀態(tài)。該指令用于子程序調用和程序狀態(tài)的切換 。第34頁/共55頁35 跳轉指令4BX帶狀態(tài)切換的跳轉指令: BX ; 功能:處理器跳轉到目標地址處,從那繼續(xù)執(zhí)行;目標地址為寄存器Rn的值和0 xFFFFFFFE做與操作的結果。目標地址處的指令可以是ARM指令,也可以是Thumb指令。第35頁/共55頁36 Load/Store

20、指令Load/Store指令用于寄存器和內存間數(shù)據(jù)的傳送,Load用于把內存中的數(shù)據(jù)裝載到寄存器中,而Store則用于把寄存器中的數(shù)據(jù)存入內存。Load/Store指令分為三類: 單一數(shù)據(jù)傳送指令(LDR和STR等); 多數(shù)據(jù)傳送指令(LDM和STM); 數(shù)據(jù)交換指令(SWP和SWPB)。第36頁/共55頁37 Load/Store指令1LDR字數(shù)據(jù)加載指令: LDR ,;2. LDRB字節(jié)數(shù)據(jù)加載指令: LDRB ,;3LDRBT 用戶模式的字節(jié)數(shù)據(jù)加載指令: LDRBT ,4LDRH半字數(shù)據(jù)加載指令: LDRH ,;第37頁/共55頁38 Load/Store指令5LDRSB有符號的字節(jié)數(shù)

21、據(jù)加載指令: LDRSB ,;6LDRSH有符號的半字數(shù)據(jù)加載指令: LDRSH ,; 7LDRT用戶模式的字數(shù)據(jù)加載指令: LDRT ,; 8. STR字數(shù)據(jù)存儲指令: STR ,; 第38頁/共55頁39 Load/Store指令9. STRB字節(jié)數(shù)據(jù)存儲指令: STRB ,; 10. STRBT用戶模式的字節(jié)數(shù)據(jù)存儲指令: STRBT ,; 11. STRH半字數(shù)據(jù)存儲指令: STRH ,; 12. STRT用戶模式的字數(shù)據(jù)存儲指令: STRT ,; 第39頁/共55頁40 Load/Store指令13. LDM批量數(shù)據(jù)加載指令: LDM !,; 14. STM批量數(shù)據(jù)存儲指令: STM

22、 !,;15. SWP字數(shù)據(jù)交換指令: SWP ,; 16. SWPB字節(jié)數(shù)據(jù)交換指令: SWPB ,; 第40頁/共55頁41 程序狀態(tài)寄存器指令 用于狀態(tài)寄存器和通用寄存器間傳送數(shù)據(jù),有兩條指令:MRS和MSR,兩者結合可用來修改程序狀態(tài)寄存器的值。1.MRS程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令: MRS ,CPSR/SPSR; 功能:用于將程序狀態(tài)寄存器的內容傳送到目標寄存器Rd中。2.MRS通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令: MRS CPSR/SPSR_,; 功能:用于將寄存器Rd的值傳送到程序狀態(tài)寄存器中。第41頁/共55頁42 協(xié)處理器指令 ARM處理器最多可支持16個

23、協(xié)處理器,用于輔助ARM完成各種協(xié)處理操作。在程序執(zhí)行過程中,各協(xié)處理器只執(zhí)行自身的協(xié)處理指令,而忽略屬于ARM處理器和其他協(xié)處理器的指令。ARM協(xié)處理器指令可分為3類:ARM處理器用于初始化協(xié)處理器的數(shù)據(jù)操作指令(CDP);協(xié)處理器寄存器和內存單元之間的數(shù)據(jù)傳送指令(LDC,STC);ARM處理器寄存器和協(xié)處理器寄存器之間的數(shù)據(jù)傳送指令(MCR,MRC) 第42頁/共55頁43 協(xié)處理器指令1. CDP協(xié)處理器數(shù)操作指令: CDP ,; 功能:用于傳遞指令給協(xié)處理器p,要求其在寄存器CRn和CRm上,進行操作opcode1,并把結果存放到CRd中,可以使用opcode2提供與操作有關的補充信

24、息。指令中的所有寄存器均為協(xié)處理器的寄存器,操作由協(xié)處理器完成。第43頁/共55頁44 協(xié)處理器指令2LDC協(xié)處理器數(shù)據(jù)讀取指令: LDCL ,; 功能:將addr表示的內存地址中的連續(xù)數(shù)據(jù)傳送到目的寄存器CRd中。L表示指令為長讀取操作,比如用于雙精度數(shù)據(jù)的傳輸;目的寄存器CRd為協(xié)處理器的寄存器;addr的尋址方式同LDR指令,其寄存器為ARM處理器的寄存器。3STC協(xié)處理器數(shù)據(jù)存儲指令: STCL ,; 功能:將寄存器CRd的值傳送到addr表示的內存地址中。指令中各參數(shù)用法同LDC指令。 第44頁/共55頁45 協(xié)處理器指令4MCR ARM處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令: M C R , , , ,,op2; 功能:將ARM處理器的寄存器Rd中的數(shù)據(jù)傳送到協(xié)處理器p的寄存器CRn,CRm中;op1,op2為協(xié)處理器將要執(zhí)行的操作。 5MRC協(xié)處理器寄存器到ARM處理器寄存器的數(shù)據(jù)傳送指令: M R C , , , ,,op2; 功能:將協(xié)處理器p的寄存器CRn,CRm中的數(shù)據(jù)傳送到ARM處理器的寄存器Rd中;op1,op2為協(xié)處理器將要執(zhí)行的操作。第45頁/共55頁46 異常中斷指令 1 SWI軟

溫馨提示

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

評論

0/150

提交評論