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

下載本文檔

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

文檔簡介

1、1 ARM處理器模式 除用戶模式之外的其余6種稱為非用戶模式,或特權(quán)模式(Privileged Modes);而特權(quán)模式中,除系統(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)運行特權(quán)級的操作系

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

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

5、處理器,T0,表示指令A(yù)RM指令,否則,表示強制下一條執(zhí)行的指令產(chǎn)生未定義指令中斷。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 異常中斷 異常中斷是指處理器由于外部或內(nèi)部的原因,停止執(zhí)行當(dāng)前任務(wù),轉(zhuǎn)而處理特定的事件,處理完后返回原程序,繼續(xù)執(zhí)行。 異常類型工作模式特定地址(低端)特定地址(高端)優(yōu)先級復(fù)位管理模式0 x000000000 xFFFF00001未定義指令未定義指令中止模式0 x000000040 xFFFF00046軟件中斷(SWI)管理模式0 x000000080 xFFFF00086指令預(yù)取中止中止模式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ā)生外部中斷請求,處理器首先自動保存當(dāng)前狀態(tài)(PC-R14,CPSR-SPSR),進入外部中斷模式,接著執(zhí)行地址0 x00000018處的指令,即b IRQ_SVC_HANDLER跳轉(zhuǎn)到標(biāo)號IRQ_SVC_HANDLER處開始執(zhí)行。 bSYS_RST_HANDLER;對0 x00000000bUDF_IN

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

10、。第12頁/共55頁13 條件域condCPSR中標(biāo)志位含 義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ù)值做相應(yīng)移位而得到;移位的方式在指令中以助記符的形式給出,而移位

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算術(shù)右移 :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 基址變址尋址 將寄存器(稱為基址寄存器)的值與指令中給出的偏移地址量相加,所得結(jié)果作為操作數(shù)的物理地址。例: LDR R0,R1,5;R0=R1+5 LDR R0,R1,R2; R0=R1+R2第20頁/共55頁21 相對尋址 相對尋址同基址變址尋址相似,區(qū)別只是將程序計數(shù)器PC作為基址寄存器,指令中的標(biāo)記作為地址偏移量。例: 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ù)傳輸。當(dāng)數(shù)據(jù)寫入和讀出內(nèi)存的

15、順序不同時,使用堆棧尋址可以很好的解決這問題。例: STMFD R13!,R0,R1,R2,R3,R4; LDMFD R13!,R0,R1,R2,R3,R4 第一條指令,將R0R4中的數(shù)據(jù)壓入堆棧,R13為堆棧指針; 第二條指令,將數(shù)據(jù)出棧,恢復(fù)R0R4原先的值。第24頁/共55頁25 ARM指令集 數(shù)據(jù)處理指令; 跳轉(zhuǎn)指令; 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 跳轉(zhuǎn)指令 跳轉(zhuǎn)指令用于實現(xiàn)程序的跳轉(zhuǎn)和程序狀態(tài)的切換。在ARM程序設(shè)計中,有兩種方式可實現(xiàn)程序的跳轉(zhuǎn):一種是跳轉(zhuǎn)指令,另一種是直接向程序寄存器P

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

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

20、指令Load/Store指令用于寄存器和內(nèi)存間數(shù)據(jù)的傳送,Load用于把內(nèi)存中的數(shù)據(jù)裝載到寄存器中,而Store則用于把寄存器中的數(shù)據(jù)存入內(nèi)存。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,兩者結(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)寄存器中。第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é)處理器寄存器和內(nèi)存單元之間的數(shù)據(jù)傳送指令(LDC,STC);ARM處理器寄存器和協(xié)處理器寄存器之間的數(shù)據(jù)傳送指令(MCR,MRC) 第42頁/共55頁43 協(xié)處理器指令1. CDP協(xié)處理器數(shù)操作指令: CDP ,; 功能:用于傳遞指令給協(xié)處理器p,要求其在寄存器CRn和CRm上,進行操作opcode1,并把結(jié)果存放到CRd中,可以使用opcode2提供與操作有關(guān)的補充信

24、息。指令中的所有寄存器均為協(xié)處理器的寄存器,操作由協(xié)處理器完成。第43頁/共55頁44 協(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ù)存儲指令: STCL ,; 功能:將寄存器CRd的值傳送到addr表示的內(nèi)存地址中。指令中各參數(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)系上傳者。文件的所有權(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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論