版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、29ARM嵌入式系統(tǒng)結(jié)構(gòu)與編程習題答案第一章 緒論1. 國內(nèi)嵌入式系統(tǒng)行業(yè)對“嵌入式系統(tǒng)”的定義是什么?如何理解?答:國內(nèi)嵌入式行業(yè)一個普遍認同的定義是:以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統(tǒng)對功能,可靠性,成本,體積,功耗嚴格要求的專業(yè)計算機系統(tǒng)。從這個定義可以看出嵌入式系統(tǒng)是與應用緊密結(jié)合的,它具有很強的專用性,必須結(jié)合實際系統(tǒng)需求進行合理的剪裁利用。因此有人把嵌入式系統(tǒng)比作是一個針對特定的應用而“量身定做”的專業(yè)計算機系統(tǒng)。2嵌入式系統(tǒng)是從何時產(chǎn)生的,簡述其發(fā)展歷程。答:從20世紀70年代單片機的出現(xiàn)到目前各式各樣的嵌入式微處理器,微控制器的大規(guī)模應用,嵌入式系統(tǒng)已
2、經(jīng)有了30多年的發(fā)展歷史。嵌入式系統(tǒng)的出現(xiàn)最初是基于單片機的。Intel公司1971年開發(fā)出第一片具有4位總線結(jié)構(gòu)的微處理器4004,可以說是嵌入式系統(tǒng)的萌芽階段。80年代初的8051是單片機歷史上值得紀念的一頁。20世紀80年代早期,出現(xiàn)了商業(yè)級的“實時操作系統(tǒng)內(nèi)核”,在實時內(nèi)核下編寫應用軟件可以使新產(chǎn)品的沿著更快,更節(jié)省資金。20世紀90年代實時內(nèi)核發(fā)展為實時多任務操作系統(tǒng)。步入21世紀以來,嵌入式系統(tǒng)得到了極大的發(fā)展。在硬件上,MCU的性能得到了極大的提升,特別是ARM技術的出現(xiàn)與完善,為嵌入式操作系統(tǒng)提供了功能強大的硬件載體,將嵌入式系統(tǒng)推向了一個嶄新的階段。3當前最常用的源碼開放的嵌
3、入式操作系統(tǒng)有哪些,請舉出兩例,并分析其特點。答:主要有嵌入式Linux和嵌入式實時操作內(nèi)核uC/OS-II嵌入式Linux操作系統(tǒng)是針對嵌入式微控制器的特點而量身定做的一種Linux操作系統(tǒng),包括常用的嵌入式通信協(xié)議和常用驅(qū)動,支持多種文件系統(tǒng)。主要有以下特點:源碼開放,易于移植,內(nèi)核小,功能強大,運行穩(wěn)定,效率高等。uC/OS是源碼工卡的實時嵌入式系統(tǒng)內(nèi)核,主要有以下特點:源碼公開,可移植性強,可固化,可剪裁,占先式,多任務,可確定性,提供系統(tǒng)服務等。4舉例說明嵌入式設備在工控設備中的應用。答:由于工業(yè)控制系統(tǒng)特別強調(diào)可靠性和實時性,“量身定做”的嵌入式控制系統(tǒng)恰能滿足工業(yè)控制的需求。例如
4、:工業(yè)過程控制,數(shù)字控制機床,電網(wǎng)設備監(jiān)測,電力自動控制系統(tǒng),石油化工監(jiān)控等。5嵌入式技術的發(fā)展趨勢有哪些?答:未來嵌入式系統(tǒng)的發(fā)展趨勢有:1.隨著信息化與數(shù)字化的發(fā)展,嵌入式設備進行網(wǎng)絡互聯(lián)是未來發(fā)展的趨勢。2.優(yōu)化嵌入式系統(tǒng)軟硬件內(nèi)核,提高系統(tǒng)運行速度,降低功耗和硬件成本。3.指令集的并行計算技術將引入嵌入式微處理器。4.嵌入式微處理器將會向多核技術發(fā)展。5.嵌入式技術將引領信息時代。第2章 ARM技術與ARM體系結(jié)構(gòu)1.簡述ARM處理器內(nèi)核調(diào)試結(jié)構(gòu)原理答:ARM處理器一般都帶有嵌入式追蹤宏單元ETM(Embedded Trace Macro),它是ARM公司自己推出的調(diào)試工具。ARM處理
5、器都支持基于JTAG(Joint Test Action Group 聯(lián)合測試行動小組)的調(diào)試方法。它利用芯片內(nèi)部的Embedded ICE來控制ARM內(nèi)核操作,可完成單步調(diào)試和斷點調(diào)試等操作。當CPU處理單步執(zhí)行完畢或到達斷點處時,就可以在宿主機端查看處理器現(xiàn)場數(shù)據(jù),但是它不能在CPU運行過程中對實時數(shù)據(jù)進行仿真。ETM解決了上述問題,能夠在CPU運行過程中實時掃描處理器的現(xiàn)場信息,并數(shù)據(jù)送往TAP(Test Access Port)控制器。上圖中分為三條掃描鏈(圖中的粗實線),分別用來監(jiān)視ARM核,ETM,嵌入式ICE的狀態(tài)。2. 分析ARM7TDMI-S各字母所代表的含義。答:ARM7
6、T D M I S 中 ARM是Advanced RISC Machines的縮寫7是系列號;T:支持高密度16位的Thumb指令集;D:支持JTAG片上調(diào)試;M:支持用于長乘法操作(64位結(jié)果)ARM指令,包含快速乘法器;I:帶有嵌入式追蹤宏單元ETM,用來設置斷點和觀察點的調(diào)試硬件;S:可綜合版本,意味著處理器內(nèi)核是以源代碼形式提供的。這種源代碼形式又可以編譯成一種易于EDA工具使用的形式。3. ARM處理器的工作模式有哪幾種,其中哪些為特權模式,哪些為異常模式,并指出處理器在什么情況下進入相應的模式。答:ARM技術的設計者將ARM處理器在應用中可能產(chǎn)生的狀態(tài)進行了分類,并針對同一類型的異
7、常狀態(tài)設定了一個固定的入口點,當異常產(chǎn)生時,程序會自動跳轉(zhuǎn)到對應異常入口處進行異常服務。 n 1用戶模式:非特權模式,也就是正常程序執(zhí)行的模式,大部分任務在這種模式下執(zhí)行。在用戶模式下,如果沒異常發(fā)生,不允許應用程序自行改變處理器的工作模式,如果有異常發(fā)生,處理器會自動切換工作模式n 2FIQ模式:也稱為快速中斷模式,支持高速數(shù)據(jù)傳輸和通道處理,當一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進入這種模式。n 3IRQ模式:也稱為普通中斷模式,:當一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進入這種模式。在這模式下按中斷的處理器方式又分為向量中斷和非向量中斷兩種。通常的中斷處理都在IRQ模式下進行。n
8、4SVC模式:稱之為管理模式,它是一種操作系統(tǒng)保護模式。當復位或軟中斷指令執(zhí)行時處理器將進入這種模式。n 5中止模式:當存取異常時將會進入這種模式,用來處理存儲器故障、實現(xiàn)虛擬存儲或存儲保護。n 6未定義指令異常模式:當執(zhí)行未定義指令時會進入這種模式,主要是用來處理未定義的指令陷阱,支持硬件協(xié)處理器的軟件仿真,因為未定義指令多發(fā)生在對協(xié)處理器的操作上。n 7系統(tǒng)模式:使用和User模式相同寄存器組的特權模式,用來運行特權級的操作系統(tǒng)任務。n 在這7種工作模式中,除了用戶模式以外,其他6種處理器模式可以稱為特權模式,在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進行處理器模式的切換。n
9、在這6種特權模式中,除了系統(tǒng)模式外的其他5種特權模式又稱為異常模式,每種異常都對應有自己的異常處理入口點。 4. 分析程序狀態(tài)寄存器(PSR)各位的功能描述,并說明C,Z,N,V在什么情況下進行置位和清零。答:n 條件位:n N = 1-結(jié)果為負, 0-結(jié)果為正或0n Z = 1-結(jié)果為0, 0-結(jié)果不為0n C =1-進位, 0-借位n V =1-結(jié)果溢出, 0結(jié)果沒溢出n Q 位:n 僅ARM 5TE/J架構(gòu)支持n 指示增強型DSP指令是否溢出n 中斷禁止位:n I = 1: 禁止 IRQ.n F = 1: 禁止 FIQ.n T Bitn 僅ARM xT架構(gòu)支持n T = 0: 處理器處于
10、 ARM 狀態(tài)n T = 1: 處理器處于 Thumb 狀態(tài)n Mode位(處理器模式位):n 0b10000Usern 0b10001FIQn 0b10010IRQn 0b10011Supervisorn 0b10111Abortn 0b11011Undefinedn 0b11111System5. 簡述ARM處理器異常處理和程序返回的過程。答:只要正常的程序流被暫時中止,處理器就進入異常模式。例如響應一個來自外設的中斷。在處理異常之前,ARM7TDMI內(nèi)核保存當前的處理器狀態(tài),這樣當處理程序結(jié)束時可以恢復執(zhí)行原來的程序。如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常。異?;蛉肟?/p>
11、返回指令 向量表偏移處理器模式優(yōu)先級BLMOV PC,R14 SWIMOVS PC,R14_svcSVC60x00000008未定義的指令MOVS PC,R14_undUND60x00000004預取指中止SUBS PC,R14_abt,#4ABT50x0000000C快中斷SUBS PC,R14_fiq,#4FIQ30x0000001C中斷SUBS PC,R14_irq,#4IRQ40x00000018數(shù)據(jù)中止SUBS PC,R14_abt,#8ABT20x00000010復位無SVC10x00000000在異常發(fā)生后,ARM7TDMI內(nèi)核會作以下工作:1.
12、在適當?shù)腖R中保存下一條指令的地址2.將CPSR復制到適當?shù)腟PSR中;3. 將CPSR模式位強制設置為與異常類型相對應的值;4.強制PC從相關的異常向量處取指。ARM7TDMI內(nèi)核在中斷異常時置位中斷禁止標志,這樣可以防止不受控制的異常嵌套。注:異常總是在ARM狀態(tài)中進行處理。當處理器處于Thumb狀態(tài)時發(fā)生了異常,在異常向量地址裝入PC時,會自動切換到ARM狀態(tài)。當異常結(jié)束時,異常處理程序必須:1.將LR中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;2.將SPSR的值復制回CPSR;3.清零在入口置位的中斷禁止標志。注:恢復CPSR的動作會將T、F和I位自動恢復為異常發(fā)生前的
13、值。6. ARM處理器字數(shù)據(jù)的存儲格式有哪兩種?并指出這兩種格式的區(qū)別。答:ARM7TDMI處理器可以將存儲器中的字以下列格式存儲§ 大端格式(Big-endian)§ 小端格式(Little-endian)§ 小端存儲器系統(tǒng): 在小端格式中,高位數(shù)字存放在高位字節(jié)中。因此存儲器系統(tǒng)字節(jié)0連接到數(shù)據(jù)線70。 § 大端存儲器系統(tǒng): 在大端格式中,高位數(shù)字存放在低位字節(jié)中。因此存儲器系統(tǒng)字節(jié)0連接到數(shù)據(jù)線3124。 7. 分析帶有存儲器訪問指令(LDR)的流水線運行情況,并用圖示說明流水線的運行機制。答:存儲器訪問指令LDR 流水線舉例取指的存儲器訪問和執(zhí)行
14、的數(shù)據(jù)路徑占用都是不可同時共享的資源,對于多周期指令來說,如果指令復雜以至于不能在單個時鐘周期內(nèi)完成執(zhí)行階段,就會產(chǎn)生流水線阻塞。 對存儲器的訪問指令LDR是非單周期指令LDR指令的執(zhí)行,訪問存儲器,回寫寄存器(占用了3個周期)。造成了MOV指令的執(zhí)行被阻斷。8. 簡述ARM9的5級流水線每一級所完成的功能和實現(xiàn)的操作。答:ARM920在指令操作上采用5級流水線 .取指:從指令Cache中讀取指令。譯碼:對指令進行譯碼,識別出是對哪個寄存器進行操作并從通用寄存器中讀取操作數(shù)。執(zhí)行:進行ALU運算和移位操作,如果是對存儲器操作的指令,則在ALU中計算出要訪問的存儲器地址。存儲器訪問:如果是對存儲
15、器訪問的指令,用來實現(xiàn)數(shù)據(jù)緩沖功能(通過數(shù)據(jù)Cache)。寄存器回寫:將指令運算或操作結(jié)果寫回到目標寄存器中。9. 什么叫流水線互鎖?應如何來解決,舉例說明。答:互鎖:當前指令的執(zhí)行需要前面指令的執(zhí)行結(jié)果,但前面的指令沒有執(zhí)行完畢,引起流水線的等待?;ユi發(fā)生時,硬件會停止指令的執(zhí)行,直到數(shù)據(jù)準備好。上邊程序中ORR指令執(zhí)行時需要使用LDR指令加載后的R4寄存器,因此造成了ORR指令的等待。編譯器以及匯編程序員可以通過重新設計代碼的順序或者其他辦法來減少互鎖的數(shù)量。第3章 ARM指令集尋址方式1.在指令編碼中,條件碼占幾位,最多有多少個條件,各個條件是如何形成的?答:條件碼占4位,最多有15個條
16、件操作碼條件助記符標志含義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í)行 (指令默認條件) 1111NV任何從不執(zhí)行(不要使用) 2. 指令條件碼中,V標志位
17、在什么情況下才能等于1?答:V溢出標志位對于加減法運算指令,當操作數(shù)和運算結(jié)果為二進制補碼表示的帶符號數(shù)時,V=1表示符號位溢出,其他指令通常不影響V位。3. 在ARM指令中,什么是合法的立即數(shù)?判斷下面各立即數(shù)是否合法,如果合法則寫出在指令中的編碼格式(也就是8位常數(shù)和4位移位數(shù))0x54300x1080x3040x5010xfb100000x3340000x3FC0000x1FE00000x55800000x7F8000x39C0000x1FE80000答:立即數(shù)必須由1個8位的常數(shù)通過進行32位循環(huán)右移偶數(shù)位得到,其中循環(huán)右移的位數(shù)由一個4位二進制的兩倍表示。即一個8位的常數(shù)通過循環(huán)右移
18、2*rotate_4位(即0,2,4,。30)得到0X54300000,0000,0000,0000,0101,0100,0011,0000 非法立即數(shù)0X1080000,0000,0000,0000,0000,0001,0000,1000 0x42循環(huán)右移30位 (rotate_4=0xF)0X3040000,0000,0000,0000,0000,0011,0000,0100 0xC1循環(huán)右移30位 (rotate_4=0xF)0x5010000,0000,0000,0000,0000,0101,0000,0001 非法立即數(shù)0xfb100000000,1111,1011,0001,000
19、0,0000,0000,0000 非法立即數(shù)0x3340000000,0000,0011,0011,0100,0000,0000,0000 0Xcd 循環(huán)右移18位(rotate_4=0x9)0x3FC0000000,0000,0011,1111,1100,0000,0000,0000 0XFF 循環(huán)右移18位(rotate_4=0x9)0x1FE00000000,0001,1111,1110,0000,0000,0000,0000 非法立即數(shù)0x55800000000,0101,0101,1000,0000,0000,0000,0000 非法立即數(shù)0x7F8000000,0000,0000,
20、0111,1111,1000,0000,0000 非法立即數(shù)0x39C0000000,0000,0011,1001,1100,0000,0000,0000 0XE7循環(huán)右移18位(rotate_4=0x9)0x1FE800000001,1111,1110,1000,0000,0000,0000,0000 非法立即數(shù)4.分析邏輯右移,算術右移,循環(huán)右移,帶擴展的循環(huán)右移它們間的差別。答:LSL邏輯左移 : LSR邏輯右移 : ASR算術右移 :ROR循環(huán)右移 : RRX帶擴展的循環(huán)右移: 5.ARM數(shù)據(jù)處理指令具體的尋址方式有哪些,如果程序計數(shù)器PC作為目標寄存器,會產(chǎn)生什么結(jié)果?答:數(shù)據(jù)處理指
21、令尋址方式具體可分為5種類型:1)第二操作數(shù)為立即數(shù)2)第二操作數(shù)為寄存器3)第二操作數(shù)為寄存器移位方式且移位的位數(shù)為一個5位立即數(shù)4)第二操作數(shù)為寄存器移位方式且移位數(shù)值放在寄存器中5)第二操作數(shù)位寄存器進行RRX移位得到。如果PC (R15)用作目標寄存器,指令會產(chǎn)生不可預知的結(jié)果。6.在Load/Store指令尋址中,字,無符號字節(jié)的Load/Store指令尋址和半字,有符號字節(jié)尋址,試分析它們之間的差別。答:在Load/Store指令尋址中,字,無符號字節(jié)的Load/Store指令尋址中共有以下3種內(nèi)存地址構(gòu)成格式:1)Addressing_mode 中的偏移量為立即數(shù) 2)Addre
22、ssing_mode 中的偏移量為寄存器的值3)Addressing_mode 中的偏移量通過寄存器移位得到半字,有符號字節(jié)的Load/Store指令尋址中共有以下2種內(nèi)存地址構(gòu)成格式: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ù)據(jù)傳遞時,地址的變化方式有以下4種類型:n 后增IA (Increment After) :每次數(shù)據(jù)傳
23、送后地址加4; n 先增IB (Increment Before) :每次數(shù)據(jù)傳送前地址加4 ; n 后減DA (Decrement After) :每次數(shù)據(jù)傳送后地址減4 ; n 先減DB (Decrement Before) :每次數(shù)據(jù)傳送前地址減4 ; 8.棧操作指令地址的變化方式有哪幾種類型,并分析它們的地址變化情況,從而得出棧操作指令尋址和塊拷貝Load/Store指令之間的對應關系。答:根據(jù)堆棧指針的指向位置不同和堆棧的生長方向不同,共有4種類型的堆棧工作方式:滿遞增堆棧FA:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。滿遞減堆棧FD:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址
24、向低地址生成??者f增堆棧EA:堆棧指針指向下一個要放入數(shù)據(jù)的空位置,且由低地址向高地址生成。空遞減堆棧ED:堆棧指針指向下一個要放入數(shù)據(jù)的空位置,且由高地址向低地址生成。9.分析協(xié)處理器加載/存儲指令的尋址方式種的內(nèi)存地址索引格式中不同的匯編語法格式下內(nèi)存地址的計算方法。答:協(xié)處理器加載/存儲指令的尋址方式種的內(nèi)存地址索引格式中,索引格式類似于LDR/STR指令尋址中的立即數(shù)作為地址偏移量的形式。Addressing_mode中的偏移量為8位立即數(shù)的匯編語法格式有以下3種: 前變址不回寫形式:<Rn>,#+/-<imm_offset8>*4 第一個內(nèi)存地址編號為基地址寄
25、存器Rn值加上/減去imm_offset8的4倍,后續(xù)的每一個地址是前一個內(nèi)存地址加4,直到協(xié)處理器發(fā)出信號,結(jié)束本次數(shù)據(jù)傳輸為止。 前變址回寫形式: <Rn>,#+/-<imm_offset8>*4!第一個內(nèi)存地址編號為基地址寄存器Rn值加上/減去imm_offset8的4倍,后續(xù)的每一個地址是前一個內(nèi)存地址加4,直到協(xié)處理器發(fā)出信號,結(jié)束本次數(shù)據(jù)傳輸為止。當指令執(zhí)行時,生成的地址值將寫入基址寄存器。 后變址回寫形式: <Rn>,#+/-<imm_offset8>*4內(nèi)存地址為基址寄存器Rn的值,當存儲器操作完成后,將基地址寄存器Rn值加上/減
26、去imm_offset8的4倍,后續(xù)的每一個地址是前一個內(nèi)存地址加4,直到協(xié)處理器發(fā)出信號,結(jié)束本次數(shù)據(jù)傳輸為止。最后將Rn值加上/減去imm_offset8的4倍寫回到基址寄存器Rn(更新基地址寄存器)。10. 寫出下列指令的機器碼,并分析指令操作功能。MOV R0,R1MOVR1,,0X198ADDEQS R1,R2,,0xABCMPR2,#0XabLDRR0,R1,#4STRR0,R1,R1,LSL #2!LDRHR0,R1,#4LDRSBR0,R2,#-2!STRBR1,R2,#0Xa0LDMIAR0,R1,R2,R8STMDBR0!,R1-R5,R10,R11STMEDSP!R0-R
27、3,LR答:機器碼部分略。MOV R0,R1 ;R0-R1MOVR1,,0X198 ;R0-0X198ADDEQS R1,R2,,0xAB ;當Z=1時,R1-R2+0xAB 并影響標志位CMPR2,#0Xab ;R2-0xAB,并影響標志位LDRR0,R1,#4 ;R0-【R1+4】STRR0,R1,R1,LSL #2! ;【R1+R1*4】-R0,R1=R1+R1*4LDRHR0,R1,#4 ;R0-【R1+4】半字,R0的高16位清零LDRSBR0,R2,#-2! ;R0-【R2-2】字節(jié),R0有符號擴展為32位,R2=R2-2STRBR1,R2,#0Xa0 ;【R2+0Xa0】-R1低
28、8位,LDMIAR0,R1,R2,R8 ;將內(nèi)存單元【R0】【R+11】以字為單位讀取到R1,R2,R8中STMDBR0!,R1-R5,R10,R11將寄存器R1R5,R10,R11的值以字為單位依次寫入【R0】中,每寫一個字之前R0=R0-4STMEDSP!R0-R3,LR將寄存器R0R3,LR的的值以字為單位依次寫入【SP】中,每寫一個字之后SP=SP-4第4章 ARM指令集系統(tǒng)1.ARM指令可分為哪幾類?說出哪幾條指令是無條件執(zhí)行的。答:ARM微處理器的指令集可以分為:數(shù)據(jù)處理指令,分支指令,加載/存儲指令,批量加載/存儲指令,交換指令,程序狀態(tài)寄存器(PSR)處理指令,協(xié)處理器操作指令
29、和異常產(chǎn)生指令八大類。幾乎所有的ARM指令都是可以有條件執(zhí)行的。帶鏈接和狀態(tài)切換的跳轉(zhuǎn)指令BLX,當目標地址由程序標號給出時,即:BLX <target_address>由于指令碼中是沒有條件編碼位的,所以指令是無條件執(zhí)行的。2.如何實現(xiàn)兩個64位數(shù)的加法操作,如何實現(xiàn)兩個64位數(shù)的減法操作,如何求一個64位數(shù)的負數(shù)?答:1)使用ADC實現(xiàn)64位加法,結(jié)果存于R1、R0中: ADDS R0,R0,R2 ;R0等于低32位相加,并影響標志位 ADC R1,R1,R3;R1等于高32位相加,并加上低位進位2)使用SBC實現(xiàn)64位減法,結(jié)果存于R1、R0中: SUBS R0,R0,R2
30、; 低32位相減,并影響標志位 SBC R1,R1,R3;高32位相減,并減去低位借位3)使用RSC指令實現(xiàn)求64位數(shù)值的負數(shù) : RSBS R2,R0,#0 RSC R3,R1,#03.寫出LDRB指令與LDRSB指令的二進制編碼格式,并指出它們之間的區(qū)別。答:LDRB指令的二進制編碼格式:LDRSB指令的二進制編碼格式:LDRB指令用于將內(nèi)存中的一個8位字節(jié)數(shù)據(jù)讀取到指令中的目標寄存器的低8位中,寄存器的高24位用零擴展。LDRSB指令用于將內(nèi)存中的一個8位字節(jié)數(shù)據(jù)讀取到指令中的目標寄存器的低8位中,寄存器的高24位用符號位擴展。4.分析下列每條語句的功能,并確定程序段所實現(xiàn)的操作。CMP
31、 R0,,0MOVEQR1,,0MOVGTR1,,1答:CMP R0,,0 ;比較R0與0的大小MOVEQR1,,0 ;若R0=0,則R1=0MOVGTR1,,1 ;若R0>0,則R1=15.請使用多種方法實現(xiàn)將字數(shù)據(jù)0xFFFFFFFF送入寄存器R0答:1)MVN R0,#02)MOV R0,#1 RSB R0,R0,#06.寫一條ARM指令,分別完成下列操作:(1)R0=16(2)R0=R1/16(3)R1=R2*3(4)R0=-R0答:(1)R0=16 MOV R0,#16(2)R0=R1/16MOV R0,R1,LSR #4(3)R1=R2*3MOV R3,#3 MUL R1,R
32、2,R3(4)R0=-R0 RSB R0,R0,#07.編寫一個ARM匯編程序,累加一個隊列中的所有元素,碰到0時停止。結(jié)果放入R4。答:假設隊列為地址從R0開始遞增的字隊列:LOOPLDR R1, R0,#4!MOVS R2, R1BEQ ENDADD R4,R4,R2B LOOPEND8.寫出實現(xiàn)下列操作的ARM指令:當Z=1時,將存儲器地址為R1的字數(shù)據(jù)讀入寄存器R0.當Z=1時,將存儲器地址為R1+R2的字數(shù)據(jù)讀入寄存器R0將存儲器地址為R1-4的字數(shù)據(jù)讀入寄存器R0。將存儲器地址為R1+R6的字數(shù)據(jù)讀入寄存器R0,并將新地址R1+R6寫入R1。答:1)LDREQ R0, R12)LD
33、REQ R0, R1,R23)LDR R0, R1,#-44)LDRR0, R1,R6!9.寫出下列ARM指令所實現(xiàn)的操作:LDRR2,R3,#-4!LDRR0,R0,R2LDRR1,R3,R2,LSL #2!LDRSBR0,R2,#-2!STRBR1,R2,,0xA0LDMIAR0,R1,R2,R8STMDBR0!,R1-R5,R10,R11答:LDRR2,R3,#-4! ;R2<-R3-4, R3=R3-4LDRR0,R0,R2 ;R0<-R0, R0=R0+R2LDRR1,R3,R2,LSL #2! ;R1<-R3+R2*4, R3=R3+R2*4LDRSBR0,R2,
34、#-2! ;R0低8位<-R2-2字節(jié)數(shù)據(jù),,R0高24位符號擴展,R2=R2-2STRBR1,R2,#0xA0R1低8位->【R2+0xA0】LDMIAR0,R1,R2,R8從地址R0開始的內(nèi)存中依次讀取字數(shù)據(jù),送入寄存器R1,R2,R8STMDBR0!,R1-R5,R10,R11將寄存器R11,R10,R5-R1的字數(shù)據(jù),依次寫入地址R0中,每次寫入前R0=R0-410.SWP指令的優(yōu)勢是什么?答:SWP指令支持原子操作,它能在一條指令中完成存儲器和寄存器之間的數(shù)據(jù)交換。11. 如何用帶PSR操作的批量字數(shù)據(jù)加載指令實現(xiàn)IRQ中斷的返回?答:在進入IRQ中斷處理程序時,首先計算
35、返回地址,并保存相關的寄存器 SUBR14,R14,#4 ; STMFD R13!, R0-R3, R12, LR 如果IRQ中斷處理程序返回到被中斷的進程則執(zhí)行下面的指令。該指令從數(shù)據(jù)棧中恢復寄存器R0R3及R12的值,將返回地址傳送到PC中,并將SPSR_irq值復制到CPSR中 LDMFD R13!, R0-R3, R12, PC 12. 用ARM匯編語言編寫代碼,實現(xiàn)將ARM處理器切換到用戶模式,并關閉中斷。答:;禁能IRQ中斷 MRS R0 CPSR ORR R0, R0,#0x80MSR CPSR, R0;切換到用戶模式 MRS R0 CPSR BIC R0, #0x0FMSR C
36、PSR, R0第5章 Thumb指令1.與32位的ARM指令集相比較,16位的Thumb指令集具有哪些優(yōu)勢?答:在ARM體系結(jié)構(gòu)中,ARM指令集是32位的,具有很高的執(zhí)行效率。但是對于嵌入式 而言,其存儲空間極其有限,由于每條ARM指令都要占用4個字節(jié),對存儲空間的要求較高。為了壓縮代碼的存儲,增加代碼存儲密度,ARM公司設計了16位的Thumb指令。Thumb代碼所需的存儲空間約為ARM代碼的60%70%。2.Thumb指令可分為哪幾類?Thumb指令有條件執(zhí)行指令嗎,如果有請說明哪些指令是條件執(zhí)行的。答:Thumb指令可分為數(shù)據(jù)處理指令,存儲器操作指令,分支指令,軟中斷指令。Thumb指令
37、集只有一條分支指令是有條件的,其余所有指令都是無條件的;Bcond label3.分析下面的Thumb指令程序代碼,指出程序所完成的功能。.global _start.text.equ num 20_start:MOVSP,#0x400ADRR0,Thumb_start+1BXR0.thumbThumb_start:ASRR2,R0,#31EORR0,R2SUBR3,R0,R2stop:Bstop.end答:上述代碼首先將處理器狀態(tài)切換到Thumb狀態(tài),ASRR2,R0,#31 ; 用R0的符號位填充R2EORR0,R2 ;如果R0為正數(shù),則R0不變;如果R0為負數(shù),則R0取反SUBR3,R0
38、,R2 ;R0-R2->R3 (R2為全零或全1)4.在Thumb狀態(tài)中,用多種方法實現(xiàn)將寄存器R0中的數(shù)據(jù)乘以10答:1)MOV R1,#10 MUL R0,R12) LSL R1,R0,#3LSL R2,R0,#1ADD R0,R1,R25.帶鏈接的分支指令BL提供了一種在Thumb狀態(tài)下程序間相互調(diào)用的方法,當從子程序返回時,可以采用哪種返回方式?答:通常使用下面的方式之一:MOV PC, LRBX LRPOP PC ;需要在子程序中使用PUSH LR6.指出下列的Thumb程序代碼所完成的功能:ASRR0,R1,#31 EORR1,R0SUBR1,R0答:ASRR0,R1,#31
39、 ;用R1的符號位填充R0EORR1,R0 ;如果R1為正數(shù),則R1不變;如果R1為負數(shù),則R1取反SUBR1,R0 ;R1-R0->R1 (R0為全零或全1)第6章 ARM匯編偽指令與偽操作1.在ARM匯編語言程序設計中,偽操作與偽指令的區(qū)別是什么?答:偽指令是ARM處理器支持的匯編語言程序里的特殊助記符,它不再處理器運行期間由機器執(zhí)行,只是在匯編時被合適的機器指令代替成ARM或Thumb指令,從而實現(xiàn)真正的指令操作。偽操作是ARM匯編語言程序里的一些特殊的指令助記符,其作用主要是為了完成匯編程序做各種準備工作,對源程序運行匯編程序處理,而不是在計算機運行期間由處理器執(zhí)行。也就是說,這
40、些偽操作只是在匯編過程中起作用,一旦匯編結(jié)束,偽操作也就隨之消失。2.分析ARM匯編語言偽指令LDR,ADRL,ADR的匯編結(jié)果,說明它們之間的區(qū)別。答: LDR偽指令將一個32位的常數(shù)或者一個地址值讀取到寄存器中,可以看作是加載寄存器的內(nèi)容。如果加載的常數(shù)符合MOV或MVN指令立即數(shù)的要求,則用MOV或MVN指令替代LDR偽指令。如果加載的常數(shù)不符合MOV或MVN指令立即數(shù)的要求,匯編器將常量放入內(nèi)存文字池,并使用一條程序相對偏移的LDR指令從內(nèi)存文字池讀出常量。 ADRL偽指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中,比ADR偽指令可以讀取更大范圍的地址 。在匯
41、編編譯器編譯源程序時,ADRL偽指令被編譯器替換成兩條合適的指令。若不能用兩條指令實現(xiàn),則產(chǎn)生錯誤,編譯失敗。ADR偽指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中。在匯編編譯器編譯源程序時,ADR偽指令被編譯器替換成一條合適的指令。通常,編譯器用一條ADD指令或SUB指令來實現(xiàn)該ADR偽指令的功能,若不能用一條指令實現(xiàn),則產(chǎn)生錯誤,編譯失敗。3.在ADS編譯環(huán)境下,寫出下列操作的偽操作:(1)聲明一個局部的算術變量La_var 并將其初始化 0;(2)聲明一個局部的邏輯變量Ll_var 并將其初始化 FALSE;(3)聲明一個局部的字符串變量Ls_var 并將其初始
42、化 空串;(4)聲明一個全局的邏輯變量Gl_var 并將其初始化 FALSE;(5)聲明一個全局的字符串變量Gs_var 并將其初始化 空串;(6)聲明一個全局的算術變量Ga_var 并將其初始化 0xAA;(7)聲明一個全局的邏輯變量Gl_var 并將其初始化 TRUE;(8)聲明一個全局的字符串變量Gs_var 并將其初始化 “CHINA”;答:(1)聲明一個局部的算術變量La_var 并將其初始化 0;LCLA La_var(2)聲明一個局部的邏輯變量Ll_var 并將其初始化 FALSE; LCLL Ll_var(3)聲明一個局部的字符串變量Ls_var 并將其初始化 空串; LCLS
43、 Ls_var(4)聲明一個全局的邏輯變量Gl_var 并將其初始化 FALSE; GCLL Gl_var(5)聲明一個全局的字符串變量Gs_var 并將其初始化 空串; GCLS Gs_var(6)聲明一個全局的算術變量Ga_var 并將其初始化 0xAA; GCLA Ga_var Ga_ var SETA 0xAA(7)聲明一個全局的邏輯變量Gl_var 并將其初始化 TRUE; GCLL Gl_var Gl_ var SETL TRUE(8)聲明一個全局的字符串變量Gs_var 并將其初始化 “CHINA”; GCLS Gs_var Gs_ var SETS "CHINA&qu
44、ot;4.用ARM開發(fā)工具偽操作將寄存器列表R0-R5,R7,R8的名稱定義為Reglist。答:Reglist RLST R0-R5,R7,R85.完成下列數(shù)據(jù)定義偽操作:(1)申請以data_buffer1為起始地址的連續(xù)的內(nèi)存單元,并依次用半字數(shù)據(jù)0x11,0x22,0x33,0x44,0x55進行初始化;(2)申請以Str_buffer為起始地址的連續(xù)的內(nèi)存單元,并用字符串“ARM7 and ARM9”進行初始化;答:(1) data_buffer1 DCW 0x11,0x22,0x33,0x44,0x55 (2) Str_buffer DCB “ARM7 and ARM9”6.定義一
45、個結(jié)構(gòu)化的內(nèi)存表,其首地址固定為0x900,該結(jié)構(gòu)化內(nèi)存表包含2個域,F(xiàn)datal長度為8個字節(jié),F(xiàn)data2長度為160個字節(jié)。答:MAP 0x900 Fdata1 FIELD 8 Fdata2 FIELD 1607.在GNU-ARM編譯環(huán)境下,寫出實現(xiàn)下列操作的偽操作:(1)分配一段字節(jié)內(nèi)存單元,并用57,0x11,031,'Z',0x76進行初始化;(2)分配一段半字內(nèi)存單元,并用0xFFE0,0xAABB,0x12進行初始化;(3)分配一段字內(nèi)存單元, 并用0x12345678,0xAABBCCDD進行初始化;(4)分配一段內(nèi)存單元,并用長為8字節(jié)的數(shù)值0x11填充10
46、0次;答:(1)分配一段字節(jié)內(nèi)存單元,并用57,0x11,031,'Z',0x76進行初始化; .byte 57,0x11,031,'Z',0x76(2)分配一段半字內(nèi)存單元,并用0xFFE0,0xAABB,0x12進行初始化; .hword 0xFFE0,0xAABB,0x12(3)分配一段字內(nèi)存單元, 并用0x12345678,0xAABBCCDD進行初始化; .word 0x12345678,0xAABBCCDD(4)分配一段內(nèi)存單元,并用長為8字節(jié)的數(shù)值0x11填充100次; .fill 100 , 8, 0x118.寫出與GNU-ARM編譯環(huán)境下偽操作
47、.arm , .thumb 功能相同的ARM標準開發(fā)工具編譯環(huán)境下的偽操作。答:.arm 對應 ARM 或 CODE32 .thumb 對應 THUMB 或 CODE16第7章 匯編語言程序設計1.分別寫出ARM集成開發(fā)環(huán)境下ARM匯編語句格式與GNU ARM環(huán)境下ARM匯編語句通用格式,并分析它們的區(qū)別。答:ADS環(huán)境下ARM匯編語句格式如下: symbol instruction ;comment symbol directive ;comment symbol pseudo-instruction ;comment Symbol :標號(地址) Instruction :指令(ARM/T
48、humb) Directive :偽操作 pseudo-instruction:偽指令GNU環(huán)境下ARM匯編語言語句格式如下: label : instructioncomment label :directivecomment label : pseudo-instructioncomment2.局部標號提供分支指令在匯編程序的局部范圍內(nèi)跳轉(zhuǎn),它的主要用途是什么,并舉一實例加以說明。答:局部標號 局部標號的語法格式如下: n routname (099) 被引用的局部標號語法規(guī)則是: % FB AT n routname 其中: n是局部標號的數(shù)字號。(099) routname是當前局部范
49、圍的名稱。 %表示引用操作。 F指示匯編器只向前搜索。 B指示匯編器只向后搜索。 A指示匯編器搜索宏的所有嵌套層次。 T指示匯編器搜索宏的當前層次。 局部標號提供分支指令在匯編程序在局部范圍內(nèi)的跳轉(zhuǎn)3.先對內(nèi)存地址0xB000開始的100個字內(nèi)存單元填入0x100000010x10000064字數(shù)據(jù),然后將每個字單元進行64位累加,結(jié)果保存于【R9:R8】(R9中存放高32位)。答:解:先對內(nèi)存地址0xB000開始的100個字內(nèi)存單元填入0x100000010x10000064字數(shù)據(jù),然后將每個字單元進行64位累加,結(jié)果保存于【R9:R8】(R9中存放高32位)。在ARM集成開發(fā)環(huán)境下編程:/
50、*-*寄存器使用說明*R0:存放地址值*R2:遞減計數(shù)器*R9:64位遞加結(jié)果的高32位*R8:64位遞加結(jié)果的低32位*-*/AREAFctrl,CODE,READONLY ;聲明代碼段FctrlENTRY;標識程序入口CODE32;聲明32位ARM指令STARTMOVR0,#0xB000;初始化寄存器MOVR1,#0x10000001MOVR2,#100loop_1;第一次循環(huán)賦值STRR1,R0,#4ADDR1,R1,#1SUBSR2,R2,#1BNEloop_1MOVR0,#0xB000MOVR2,#100MOVR9,#0MOVR8,#0loop_2;第二次循環(huán)累加LDRR1,R0,#4ADDSR8,R1,R8;R8=R8+R1,進位影響標志位ADDCR9,R9,#0;R9=R9+C,C為進位位SUBSR2,R2,#1BNEloop_2StopBStop;文件結(jié)束END4.在GNU環(huán)境下用ARM匯編語言編寫程序,初始化ARM處理器各模式下的堆棧指針SP_mode (R13),各模式的堆棧指針地址如下:.equ _ISR_STA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年釣魚彎嘴鉗項目可行性研究報告
- 第章保險合同習題
- 貼牌生產(chǎn)合同范本模板
- 年終2022工作述職報告(7篇)
- 紅樓夢讀書心得體會
- 房地產(chǎn)辦公室工作總結(jié)(15篇)
- 屏幕租賃合同協(xié)議書
- 安全員培訓心得體會
- 2025年度高端建筑設備混凝土輸送泵租賃與施工協(xié)調(diào)合同2篇
- 2024年離合器摩擦片總成項目可行性研究報告
- 三年級語文試卷講評市公開課一等獎省賽課獲獎課件
- 接觸鏡臨床驗配智慧樹知到期末考試答案2024年
- 2024年武漢長江新區(qū)管理委員會基層市場監(jiān)管所市場監(jiān)管崗招錄6人《行政職業(yè)能力測驗》模擬試卷(答案詳解版)
- 揚州市江都區(qū)2022-2023學年八年級上學期期末道德與法治試題(含答案解析)
- 倉儲物流部的安全與風險管理措施
- 征兵體檢人員培訓課件
- 山東省濟南市歷下區(qū)2023-2024學年八年級上學期期末語文試題
- 火災事故中的通風與煙氣控制
- 服裝陳列課程之新店開鋪陳列規(guī)劃方案課件
- 2024年完整離婚協(xié)議書下載-(含多款)
- 住院醫(yī)師述職報告
評論
0/150
提交評論