ARM復習課后題答案_第1頁
ARM復習課后題答案_第2頁
ARM復習課后題答案_第3頁
ARM復習課后題答案_第4頁
ARM復習課后題答案_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1.2.3.Linux :1)2)arm 處理器的工作模式有哪幾種,其中哪些為特權(quán)模式,哪些為異常模式, 器在什么情況下進入相應(yīng)的模式。ARM 處理器共有 7 種工作模式:并指出處理國內(nèi)嵌入式系統(tǒng)行業(yè)對嵌入式系統(tǒng)的定義是什么?如何理解答: 以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、 可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。從這個定義看以看出嵌入式系統(tǒng)是與應(yīng)用緊密結(jié)合的,它具有很強的專用性,必 須結(jié)合實際系統(tǒng)要求進行合理的裁剪利用。因此有人把嵌入式系統(tǒng)比作是一個針對 特定的應(yīng)用而量身定做的專用計算機系統(tǒng)。當前最常見的源碼開放的嵌入式操作系統(tǒng)有哪些,請舉出兩例

2、,并分析其特點 答:嵌入式 linux 和嵌入式實時操作系統(tǒng) uc/os-II linux 是源碼開放的,每一個技術(shù)細節(jié)都是透明的,易于裁剪定制。目前嵌入式 linux 已經(jīng)在多種嵌入式處理器芯片移植成功, 有大量且不斷增加的 開發(fā)工具,這些工具為嵌入式系統(tǒng)開發(fā)提供了良好的開發(fā)環(huán)境。Linux 內(nèi)核小、功能強大、運作穩(wěn)定、效率高。Ucos:1)源代碼公開2)可移植性。3)可固化4)可裁剪5)占先式6)多任務(wù)7)可確定性。8)系統(tǒng)服務(wù)第 2 章 ARM 技術(shù)與 ARM 體系結(jié)構(gòu)答:用戶模式 :非特權(quán)模式,也就是正常程序執(zhí)行的模式,大部分任務(wù)在這種模式 下執(zhí)行。在用戶模式下,如果沒異常發(fā)生,不允許

3、應(yīng)用程序自行改變處理器的工作 模式,如果有異常發(fā)生,處理器會自動切換工作模式FIQ 模式: 也稱為快速中斷模式,支持高速數(shù)據(jù)傳輸和通道處理,當一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進入這種模式。IRQ 模式: 也稱為普通中斷模式, :當一個低優(yōu)先級中斷產(chǎn)生時將會進入這種模 式。在這模式下按中斷的處理器方式又分為向量中斷和非向量中斷兩種。通常的中 斷處理都在 IRQ 模式下進行。SVC 模式 :稱之為管理模式,它是一種操作系統(tǒng)保護模式。當復位或軟中斷指 令執(zhí)行時處理器將進入這種模式。中止模式: 當存取異常時將會進入這種模式,用來處理存儲器故障、實現(xiàn)虛擬 存儲或存儲保護。未定義指令異常模式: 當執(zhí)

4、行未定義指令時會進入這種模式,主要是用來處理 未定義的指令陷阱,支持硬件協(xié)處理器的軟件仿真,因為未定義指令多發(fā)生在對協(xié) 處理器的操作上。系統(tǒng)模式: 使用和 User 模式相同寄存器組的特權(quán)模式,用來運行特權(quán)級的操作系統(tǒng)任務(wù)。在這7種工作模式中,除了用戶模式以外,其他6種處理器模式可以稱為特權(quán)模式,在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進行處理5種特權(quán)模式又器模式的切換。在這 6種特權(quán)模式中,除了系統(tǒng)模式外的其他稱為異常模式N、V在什4.分析程序狀態(tài)寄存器(PSR)各位的功能描述,并說明 么情況下進行置位和清零。答:PSR的具體格式為M Z 1 C 1 V f Q 1 J1 un

5、iNcxi(F T 1 rncxJc1展域1| (*70節(jié) M M 2a 2726324 23召 *4V 溢出標志位 對于加/減法運算指令,當操作數(shù)和運算結(jié)果為二進制補碼表示的帶符號數(shù)時, V= 1表示符號位溢出,其他的指令通常不影響V位。CMN),結(jié)果產(chǎn)生進位,則 C= 1,表示無符號C= 0 ;CMP),結(jié)果產(chǎn)生借位,則 C= 0,表示無符號數(shù)C= 1 ;C進位或借位標志位 對于加法指令(包括比較指令 數(shù)運算發(fā)生上溢出,其他情況下 在減法指令中(包括比較指令 運算發(fā)生下溢出,其他情況下對于包含移位操作的非加/減法運算指令,C中包含最后一次溢出位的數(shù)值; 對于其他非加/減法運算指令,C位的值

6、通常不受影響。Z 結(jié)果為0標志位Z= 1表示運算結(jié)果是0, Z= 0表示運算結(jié)果不是零; 對于CMP指令,Z = 1表示進行比較的兩個數(shù)大小相等。N符號標志位本位設(shè)置成當前指令運算結(jié)果的bit31的值。當兩個補碼表示有符號整數(shù)運算時,N= 1表示運算的結(jié)果為負數(shù),N = 0表示結(jié)果為正數(shù)或零。5.簡述ARM處理器異常處理和程序返回的過程。 答:ARM在異常產(chǎn)生時會進行以下操作:(1)將引起異常指令的下一條指令地址保存到新的異常模式的 常處理程序執(zhí)行完后能根據(jù) LR中的值正確返回; 將CP SR的內(nèi)容復制到新的異常模式下的 SP SR中; 根據(jù)異常類型將CPSR模式控制位強制設(shè)定為發(fā)生異常所對應(yīng)

7、的模式 值;強制PC指向相應(yīng)的異常向量地址。LR中,使異(4)ARM在異常返回時(1) 從 SPSR_mode恢復 CPSR(2) 從 LR_mode恢復 PC。6 ARM 處理器字數(shù)據(jù)的存儲格式有哪兩種?并指出這兩種格式的區(qū)別。 答:(1)小端存儲格式( Little-Endian ) 在小端存儲格式中,對于地址為 A 的字單元,其中字節(jié)單元由低位到高位字節(jié)地 址順序為A,A+1,A+2 , A+3 ;對于地址為A的半字單元,其中字節(jié)單元由低位到高 位字節(jié)地址順序為 A,A+1 ;A 的字單元,其中字節(jié)單元由高位到低位字節(jié)地對于地址為 A 的半字單元,其中字節(jié)單元由高位到低(2)大端存儲格式

8、( Big-Endian )在大端存儲格式中,對于地址為 址順序為 A,A+1,A+2 , A+3;位字節(jié)地址順序為 A,A+1 。第3章ARM指令集尋址方式3 在 ARM 指令中,什么是合法的立即數(shù)?判斷下面各立即數(shù)是否合法,如果合 法則寫出在指令中的編碼格式(也就是 8 位常數(shù)和 4 位的移位數(shù))。 0x5430 0x108 0x304 0x5010xFB10000 0x334000 0x3FC000 0x1FE0000十六進制立即數(shù)兩端 0 去掉展成二進制連續(xù)偶數(shù)個 0 去掉,數(shù)字中間 0不去掉 剩下數(shù)字位數(shù)小于等于 8 可以,反之,不可以。0x5580000 0x7F800 0x39C

9、000 0x1FE80000 答:計算步驟:(1)(2)(3)5 ARM 會產(chǎn)生什么結(jié)果? 答:ARM數(shù)據(jù)處理指令尋址方式有5種1)2)3)4)5)數(shù)據(jù)處理指令具體的尋址方式有哪些,如果程序計數(shù)器PC 作為目標寄存器,(4)第二操作數(shù)為立即數(shù)第二操作數(shù)為寄存器第二操作數(shù)為寄存器移位方式,且移位的位數(shù)為一個 5位的立即數(shù) 第二操作數(shù)為寄存器移位方式,且移位數(shù)值放在寄存器中 第二操作數(shù)為寄存器進行 RRX 移位得到如果程序計數(shù)器 PC 作為目標寄存器,會發(fā)生程序跳轉(zhuǎn)。6 在 Load/Store 指令尋址中,字、無符號字節(jié)的 Load/Store 指令尋址和半字、有 符號字節(jié)尋址,試分析它們之間的

10、差別。無符號字節(jié)尋址:Addressing_modeAddressing_modeAddressing_mode中的偏移量為立即數(shù) 中的偏移量為寄存器的值 中的偏移量通過寄存器移位得到答:字、1)2)3)半字、有符號字節(jié)尋址:1 ) Addressing_mode 中的偏移量為立即數(shù)2) Addressing_mode 中的偏移量為寄存器的值7答:從以上分析看出:差別就在于后者沒有第三項尋址方式。塊拷貝 Load/Store 指令在實現(xiàn)寄存器組和連續(xù)的內(nèi)存單元中數(shù)據(jù)傳遞時,地址 的變化方式有哪幾種類型,并分析它們的地址變化情況。批量 Load/Store 指令在實現(xiàn)寄存器組和連續(xù)的內(nèi)存單元中數(shù)

11、據(jù)傳遞時,地址的 變化方式( addr_mode )有以下 4 種類型:后增 IA (Increment After) :每次數(shù)據(jù)傳送后地址加 4; 先增 IB (Increment Before) :每次數(shù)據(jù)傳送前地址加 4 ; 后減 DA (Decrement After) :每次數(shù)據(jù)傳送后地址減 4 ; 先減 DB (Decrement Before) :每次數(shù)據(jù)傳送前地址減 4 。 棧操作指令地址的變化方式有哪幾種類型,并分析它們的地址變化情況,從而 Load/Store 指令之間的對應(yīng)關(guān)系。8 得出棧操作指令尋址和塊拷貝 答:(1) 四種類型的堆棧工作方式,即:FA(Empty As

12、cending) :堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。FD( Full Descending ):堆棧指針指向最后壓入的數(shù)據(jù),且由高地址 向低地址生成。EA(Full Ascending) :堆棧指針指向下一個將要放入數(shù)據(jù)的空位置, 且由低地址向高地址生成。ED(Empty Descending) :堆棧指針指向下一個將要放入數(shù)據(jù)的空位 置,且由高地址向低地址生成。滿遞增堆棧滿遞減堆棧空遞增堆??者f減堆棧(2) 棧操作指令尋址和塊拷貝 Load/Store 指令之間的對應(yīng)關(guān)系見表3-10。第4章ARM指令集系統(tǒng)#0#1時, MOVEQ 執(zhí)行,則 R1 等于0;4. 分析下列每

13、條語句的功能,并確定程序段所實現(xiàn)的操作。 CMP R0 ,#0 MOVEQ R1 , MOVGT R1 , 答:分析: 當 R0 等于 0 當 R0 等于正數(shù)時, MOVGT 執(zhí)行,則 R1 等于 1; 此功能碼段可以判別 R0 中的值為正數(shù)還是 0。5. 請使用多種方法實現(xiàn)將字數(shù)據(jù) 0xFFFFFFFF 送入寄存器 R0 。 答: 例如, MVN R0 ,#0 或者:MOV R0 ,#0SUB R0,R0,#1還可以用其它運算指令來實現(xiàn),讀者自行寫出。R3, -4 !R0 ,R2R3,R2,LSL 2??;9. 寫出下列 ARM 指令所實現(xiàn)操作: LDR R2 ,LDR R0 ,LDR R1

14、,LDRSB R0 ,R2 , #-2 !STRB R1 ,R2, #0xA0LDMIA R0 ,R1,R2, R8STMDB R0 !, R1-R5 ,R10,R11 解答:LDR R2,R3,#-4!將存儲器地址為R3-4的字數(shù)據(jù)讀入R2,并將地址R3-4LDR RO,RO,R2將存儲器地址為R0的字數(shù)據(jù)讀入R0 ,并將地址R0+R2LDR R1,R3,R2,LSL#2!將存儲器地址為 R3+R2*4 的字數(shù)據(jù)讀入 R1 ,并將地址寫入 R3寫入 R0R3+R2*4 寫入 R3LDRSB R0,R2,#-2!將存儲器地址為 R2-2 的字節(jié)數(shù)據(jù)讀入 R0 的低8 位,將 R0 的高24 位

15、用符號 位擴展,并將地址 R2-2 寫入 R2STRB R1,R2,#0xA0將RO的低8位存入存儲器地址為R2+0XA0 字節(jié)中LDMIA RO,R1,R2,R8將內(nèi)存單元 RO 所指向的地址單元以字為單位遞減方式讀取到 R1, R2, R8 中, 低地址編號的字數(shù)據(jù)內(nèi)存單元對應(yīng)低編號寄存器STMDB RO! R1-R5,R1O,R11將 R1-R5,R1O,R11 存儲到以 RO 為起始地址的遞減內(nèi)存中,最終 RO 指向存放 R11 的地址單元10. SWP 指令的優(yōu)勢是什么 ?答:ARM 指令支持原子操作,主要是用來對信號量的操作,因為信號量操作的要求 是作原子操作,即在一條指令中完成信

16、號量的讀取和修改操作。SWP 數(shù)據(jù)交換指令如何用帶 PSR 操作的批量字數(shù)據(jù)加載指令實現(xiàn) IRQ 中斷的返回? 在進入IRQ中斷處理子程序時,首先計算返回的地址,并保存相關(guān)的寄存器SUB R14,R14,#4STMFD R13!,RO-R3,R12,LR如果IRQ中斷處理程序返回到被中斷的進程則執(zhí)行下面的指令。該指令從數(shù)據(jù)棧中恢復R0-R3及R12的值,將返回地址傳送到PC中,并將SPSR_irq值復制到CPSF中LDMFD R13!,R0-R3,R12, PC就能完成此功能,能在一條指令中實現(xiàn)存儲器和寄存器之間交換數(shù)據(jù)。11. 答:用 ARM 匯編語言編寫代碼,實現(xiàn)將 ARM 處理器切換到用

17、戶模式,并關(guān)閉中斷。12.equ User_Mode, OX1O .equ Mode_Mask OX1F .equ NOINT, OXCO讀 CPSRMRS RO, CPSRBIC R0, R0, #Mode_MaskORR R1, R0, #User_Mode | NOINT修改進入用戶模式第6章ARM 匯編偽指令與偽操作MSR CPSR_cxsf, R11.在ARM匚編語言程序設(shè)計中,偽操作與偽指令的區(qū)別是什么?答:偽指令是ARM處理器支持的匯編語言程序里的特殊助記符,它不在處理器運行期間由機器執(zhí)行,只是在匯編時被合適的機器指令代替成ARM或 Thumb指令,從而實現(xiàn)真正的指令操作。偽操作

18、是ARM匚編語言程序里的一些特殊的指令助記符,其作用主要是為完成匯編程序做各種準備工作, 對源程序進行匯編程序處理, 而不是在計算機運行期間由處理器執(zhí)行。 也就是 說,這些偽操作只是在匯編過程中起作用,一旦匯編結(jié)束,偽操作也就隨之消失。2.分析ARM匯編語言偽指令 LDR ADRL ADR的匯編結(jié)果,說明它們之間的區(qū)別。 答:LDR是大范圍地址讀取偽指令。LDR將一個32位的常數(shù)或者一個地址值讀取到寄存器中,以看作是加載寄存器的內(nèi)容。ADRL是中等范圍地址讀取偽指令。它將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中。PC 相對偏移的地址值或基于寄存器相對偏移的地ADR是小

19、范圍地址讀取偽指令,它將基于 址值讀取到寄存器中。從以上分析可以看出:ADRLLDR不依賴于PC值,加載的數(shù)據(jù)是絕對值。和ADR依賴于PC值,加載的數(shù)據(jù)是基于 PC相對偏移值匯編語言程序設(shè)計4.在GNI環(huán)境下用ARM匚編語言編寫程序初始化各ARM處理器各模式下的堆棧指針SP_mode(R13),各模式的堆棧地址如下:.equ_ISR_STARTADDRESS,0xcFFF000.equ .equ .equ .equ .equ .equUserStack, _ISR_STARTADDRESS SVCStack, _ISR_STARTADDRESS+64UndefStack, _ISR_START

20、ADDRESS +64*2 AbortStack, _ISR_STARTADDRESS +64*3IRQStack, _ISR_STARTADDRESS +64*4FIQStack, _ISR_STARTADDRESS +64*5/ 示例程序 代碼為平常自己寫的,上機調(diào)試成功!與題目有點不一樣,變量名和數(shù)值得改一改 /.equ.equ.equ.equ.equ.equ.equISR_STARTADDRESS,0x40008000 svc_stack_top, ISR_STARTADDRESS /*0x40008000*/ user_stack_top, ISR_STARTADDRESS-512

21、undefstack_top, ISR_STARTADDRESS-512*2 /*0x40007C00*/ abortstack_top, ISR_STARTADDRESS-512*3 /*0x40007A00*/ isrstack_top, ISR_STARTADDRESS-512*4 /*0x40007800*/ fiqstack_top, ISR_STARTADDRESS-512*5 /*0x40007600*/*0x40007E00*/.equ.equ.equ .equ .equ.equ.equuser_mode, 0x10 fiq_mode, 0x11 irq_mode, 0x12

22、svc_mode, abt_mode, udf_mode, sys_mode,0x130x170x1c0x1f.global _start.text_start:b reset_handlerb undifned_handlerb svc_handlerb prefetch_handler b abort_handler b .b irq_handler b fiq_handlerreset_handler:ldr sp,=svc_stack_top /*svc_stack */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#udf_mode msr cpsr_

23、c,r0ldr sp,=undefstack_top /*undefstack */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#abt_mode msr cpsr_c,r0ldr sp,=abortstack_top /*abortstack */ mrs r0,cpsr bic r0,r0,#0x1forr r0,r0,#irq_modemsr cpsr_c,r0ldr sp,=isrstack_top /*isrstack*/ mrs r0,cpsrbic r0,r0,#0x1forr r0,r0,#fiq_modemsr cpsr_c,r0ldr sp

24、,=fiqstack_top /*fiqstack*/mrs r0,cpsrbic r0,r0,#0x1forr r0,r0,#user_modemsr cpsr_c,r0ldr sp,=user_stack_top /*user_stack*/handler: b .stop: b undifned_ svc_handIer:stmfd sp!,r0-r12,IrIdr r0,Ir,#-4 bic r0,r0,#0xff000000Idmfd sp !,r0-r12 ,pcAprefetch_handler: b . abort_handIer: irq_handIer: fiq_handI

25、er: .end/ 另外有第5 題和第 7 題,沒時間寫,可是老師也劃題了。第 8 章 嵌入式 C 編程規(guī)范限制符在程序中起到什么作用,請舉例說明。限制符起到抑制編譯器優(yōu)化的作用。3.volatile答: volatile 例如:中斷服務(wù)程序中修改的供其他程序檢測的變量的問題。 Static char flg=0;main(void)While(1) if(flg)程序代碼A else程序代碼B/ 中斷服務(wù)程序Void ISR_INT(void)flg=1;flg 的值并沒有變化, 編譯器會優(yōu)化程序,改為 volatile static char flg=0在這個程序中, 由于在程序執(zhí)行的大部

26、分時間內(nèi), flg=0 。優(yōu)化后的程序為:Static char flg=0;main(void)while(1) 程序代碼 B解決問題的方法:將聲明語句 static char flg=0;3. 請分析下列程序代碼的執(zhí)行結(jié)果 #include main()int value=0xff1;int *p1,*p2,*p3,*p4; p1=&value;p2=&p1;p3=&p2;p4=&p3;printf(“*p4=%xn ”,*p4); 程序執(zhí)行結(jié)果: *p4=oxff1;5.分析宏定義 #define POWER(x) x*x 是否合理,舉例說明。如果不合理,應(yīng)如何更改? 答:不合理。x=i+j;POWER(x)=i+j*i+j;而不是(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論