




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、ARM嵌入式系統(tǒng)結(jié)構(gòu)與編程習(xí)題答案第一章 緒論1. 國內(nèi)嵌入式系統(tǒng)行業(yè)對“嵌入式系統(tǒng)”的定義是什么?如何理解?答:國內(nèi)嵌入式行業(yè)一個普遍認(rèn)同的定義是:以應(yīng)用為中心,以計算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能,可靠性,成本,體積,功耗嚴(yán)格要求的專業(yè)計算機(jī)系統(tǒng)。從這個定義可以看出嵌入式系統(tǒng)是與應(yīng)用緊密結(jié)合的,它具有很強(qiáng)的專用性,必須結(jié)合實際系統(tǒng)需求進(jìn)行合理的剪裁利用。因此有人把嵌入式系統(tǒng)比作是一個針對特定的應(yīng)用而“量身定做”的專業(yè)計算機(jī)系統(tǒng)。2嵌入式系統(tǒng)是從何時產(chǎn)生的,簡述其發(fā)展歷程。答:從20世紀(jì)70年代單片機(jī)的出現(xiàn)到目前各式各樣的嵌入式微處理器,微控制器的大規(guī)模應(yīng)用,嵌入式系統(tǒng)已經(jīng)有
2、了30多年的發(fā)展歷史。嵌入式系統(tǒng)的出現(xiàn)最初是基于單片機(jī)的。Intel公司1971年開發(fā)出第一片具有4位總線結(jié)構(gòu)的微處理器4004,可以說是嵌入式系統(tǒng)的萌芽階段。80年代初的8051是單片機(jī)歷史上值得紀(jì)念的一頁。20世紀(jì)80年代早期,出現(xiàn)了商業(yè)級的“實時操作系統(tǒng)內(nèi)核”,在實時內(nèi)核下編寫應(yīng)用軟件可以使新產(chǎn)品的沿著更快,更節(jié)省資金。20世紀(jì)90年代實時內(nèi)核發(fā)展為實時多任務(wù)操作系統(tǒng)。步入21世紀(jì)以來,嵌入式系統(tǒng)得到了極大的發(fā)展。在硬件上,MCU的性能得到了極大的提升,特別是ARM技術(shù)的出現(xiàn)與完善,為嵌入式操作系統(tǒng)提供了功能強(qiáng)大的硬件載體,將嵌入式系統(tǒng)推向了一個嶄新的階段。3當(dāng)前最常用的源碼開放的嵌入式
3、操作系統(tǒng)有哪些,請舉出兩例,并分析其特點(diǎn)。答:主要有嵌入式Linux和嵌入式實時操作內(nèi)核uC/OS-II嵌入式Linux操作系統(tǒng)是針對嵌入式微控制器的特點(diǎn)而量身定做的一種Linux操作系統(tǒng),包括常用的嵌入式通信協(xié)議和常用驅(qū)動,支持多種文件系統(tǒng)。主要有以下特點(diǎn):源碼開放,易于移植,內(nèi)核小,功能強(qiáng)大,運(yùn)行穩(wěn)定,效率高等。uC/OS是源碼工卡的實時嵌入式系統(tǒng)內(nèi)核,主要有以下特點(diǎn):源碼公開,可移植性強(qiáng),可固化,可剪裁,占先式,多任務(wù),可確定性,提供系統(tǒng)服務(wù)等。4舉例說明嵌入式設(shè)備在工控設(shè)備中的應(yīng)用。答:由于工業(yè)控制系統(tǒng)特別強(qiáng)調(diào)可靠性和實時性,“量身定做”的嵌入式控制系統(tǒng)恰能滿足工業(yè)控制的需求。例如:工
4、業(yè)過程控制,數(shù)字控制機(jī)床,電網(wǎng)設(shè)備監(jiān)測,電力自動控制系統(tǒng),石油化工監(jiān)控等。5嵌入式技術(shù)的發(fā)展趨勢有哪些?答:未來嵌入式系統(tǒng)的發(fā)展趨勢有:1.隨著信息化與數(shù)字化的發(fā)展,嵌入式設(shè)備進(jìn)行網(wǎng)絡(luò)互聯(lián)是未來發(fā)展的趨勢。2.優(yōu)化嵌入式系統(tǒng)軟硬件內(nèi)核,提高系統(tǒng)運(yùn)行速度,降低功耗和硬件成本。3.指令集的并行計算技術(shù)將引入嵌入式微處理器。4.嵌入式微處理器將會向多核技術(shù)發(fā)展。5.嵌入式技術(shù)將引領(lǐng)信息時代。第2章 ARM技術(shù)與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ǎn)調(diào)試等操作。當(dāng)CPU處理單步執(zhí)行完畢或到達(dá)斷點(diǎn)處時,就可以在宿主機(jī)端查看處理器現(xiàn)場數(shù)據(jù),但是它不能在CPU運(yùn)行過程中對實時數(shù)據(jù)進(jìn)行仿真。ETM解決了上述問題,能夠在CPU運(yùn)行過程中實時掃描處理器的現(xiàn)場信息,并數(shù)據(jù)送往TAP(Test Access Port)控制器。上圖中分為三條掃描鏈(圖中的粗實線),分別用來監(jiān)視ARM核,ETM,嵌入式ICE的狀態(tài)。2. 分析ARM7TDMI-S各字母所代表的含義。答:ARM7 T
6、D M I S 中 ARM是Advanced RISC Machines的縮寫7是系列號;T:支持高密度16位的Thumb指令集;D:支持JTAG片上調(diào)試;M:支持用于長乘法操作(64位結(jié)果)ARM指令,包含快速乘法器;I:帶有嵌入式追蹤宏單元ETM,用來設(shè)置斷點(diǎn)和觀察點(diǎn)的調(diào)試硬件;S:可綜合版本,意味著處理器內(nèi)核是以源代碼形式提供的。這種源代碼形式又可以編譯成一種易于EDA工具使用的形式。3. ARM處理器的工作模式有哪幾種,其中哪些為特權(quán)模式,哪些為異常模式,并指出處理器在什么情況下進(jìn)入相應(yīng)的模式。答:ARM技術(shù)的設(shè)計者將ARM處理器在應(yīng)用中可能產(chǎn)生的狀態(tài)進(jìn)行了分類,并針對同一類型的異常狀
7、態(tài)設(shè)定了一個固定的入口點(diǎn),當(dāng)異常產(chǎn)生時,程序會自動跳轉(zhuǎn)到對應(yīng)異常入口處進(jìn)行異常服務(wù)。 n 1用戶模式:非特權(quán)模式,也就是正常程序執(zhí)行的模式,大部分任務(wù)在這種模式下執(zhí)行。在用戶模式下,如果沒異常發(fā)生,不允許應(yīng)用程序自行改變處理器的工作模式,如果有異常發(fā)生,處理器會自動切換工作模式n 2FIQ模式:也稱為快速中斷模式,支持高速數(shù)據(jù)傳輸和通道處理,當(dāng)一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進(jìn)入這種模式。n 3IRQ模式:也稱為普通中斷模式,:當(dāng)一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進(jìn)入這種模式。在這模式下按中斷的處理器方式又分為向量中斷和非向量中斷兩種。通常的中斷處理都在IRQ模式下進(jìn)行。n 4S
8、VC模式:稱之為管理模式,它是一種操作系統(tǒng)保護(hù)模式。當(dāng)復(fù)位或軟中斷指令執(zhí)行時處理器將進(jìn)入這種模式。n 5中止模式:當(dāng)存取異常時將會進(jìn)入這種模式,用來處理存儲器故障、實現(xiàn)虛擬存儲或存儲保護(hù)。n 6未定義指令異常模式:當(dāng)執(zhí)行未定義指令時會進(jìn)入這種模式,主要是用來處理未定義的指令陷阱,支持硬件協(xié)處理器的軟件仿真,因為未定義指令多發(fā)生在對協(xié)處理器的操作上。n 7系統(tǒng)模式:使用和User模式相同寄存器組的特權(quán)模式,用來運(yùn)行特權(quán)級的操作系統(tǒng)任務(wù)。n 在這7種工作模式中,除了用戶模式以外,其他6種處理器模式可以稱為特權(quán)模式,在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器模式的切換。n 在這
9、6種特權(quán)模式中,除了系統(tǒng)模式外的其他5種特權(quán)模式又稱為異常模式,每種異常都對應(yīng)有自己的異常處理入口點(diǎn)。 4. 分析程序狀態(tài)寄存器(PSR)各位的功能描述,并說明C,Z,N,V在什么情況下進(jìn)行置位和清零。答:n 條件位:n N = 1-結(jié)果為負(fù), 0-結(jié)果為正或0n Z = 1-結(jié)果為0, 0-結(jié)果不為0n C =1-進(jìn)位, 0-借位n V =1-結(jié)果溢出, 0結(jié)果沒溢出n Q 位:n 僅ARM 5TE/J架構(gòu)支持n 指示增強(qiáng)型DSP指令是否溢出n 中斷禁止位:n I = 1: 禁止 IRQ.n F = 1: 禁止 FIQ.n T Bitn 僅ARM xT架構(gòu)支持n T = 0: 處理器處于 A
10、RM 狀態(tài)n T = 1: 處理器處于 Thumb 狀態(tài)n Mode位(處理器模式位):n 0b10000Usern 0b10001FIQn 0b10010IRQn 0b10011Supervisorn 0b10111Abortn 0b11011Undefinedn 0b11111System5. 簡述ARM處理器異常處理和程序返回的過程。答:只要正常的程序流被暫時中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個來自外設(shè)的中斷。在處理異常之前,ARM7TDMI內(nèi)核保存當(dāng)前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時可以恢復(fù)執(zhí)行原來的程序。如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常。異常或入口返回
11、指令 向量表偏移處理器模式優(yōu)先級BLMOV PC,R14 SWIMOVS PC,R14_svcSVC60x00000008未定義的指令MOVS PC,R14_undUND60x00000004預(yù)取指中止SUBS PC,R14_abt,#4ABT50x0000000C快中斷SUBS PC,R14_fiq,#4FIQ30x0000001C中斷SUBS PC,R14_irq,#4IRQ40x00000018數(shù)據(jù)中止SUBS PC,R14_abt,#8ABT20x00000010復(fù)位無SVC10x00000000在異常發(fā)生后,ARM7TDMI內(nèi)核會作以下工作:1.在適
12、當(dāng)?shù)腖R中保存下一條指令的地址2.將CPSR復(fù)制到適當(dāng)?shù)腟PSR中;3. 將CPSR模式位強(qiáng)制設(shè)置為與異常類型相對應(yīng)的值;4.強(qiáng)制PC從相關(guān)的異常向量處取指。ARM7TDMI內(nèi)核在中斷異常時置位中斷禁止標(biāo)志,這樣可以防止不受控制的異常嵌套。注:異??偸窃贏RM狀態(tài)中進(jìn)行處理。當(dāng)處理器處于Thumb狀態(tài)時發(fā)生了異常,在異常向量地址裝入PC時,會自動切換到ARM狀態(tài)。當(dāng)異常結(jié)束時,異常處理程序必須:1.將LR中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;2.將SPSR的值復(fù)制回CPSR;3.清零在入口置位的中斷禁止標(biāo)志。注:恢復(fù)CPSR的動作會將T、F和I位自動恢復(fù)為異常發(fā)生前的值。
13、6. ARM處理器字?jǐn)?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)的流水線運(yùn)行情況,并用圖示說明流水線的運(yùn)行機(jī)制。答:存儲器訪問指令LDR 流水線舉例取指的存儲器訪問和執(zhí)行的數(shù)
14、據(jù)路徑占用都是不可同時共享的資源,對于多周期指令來說,如果指令復(fù)雜以至于不能在單個時鐘周期內(nèi)完成執(zhí)行階段,就會產(chǎn)生流水線阻塞。 對存儲器的訪問指令LDR是非單周期指令LDR指令的執(zhí)行,訪問存儲器,回寫寄存器(占用了3個周期)。造成了MOV指令的執(zhí)行被阻斷。8. 簡述ARM9的5級流水線每一級所完成的功能和實現(xiàn)的操作。答:ARM920在指令操作上采用5級流水線 .取指:從指令Cache中讀取指令。譯碼:對指令進(jìn)行譯碼,識別出是對哪個寄存器進(jìn)行操作并從通用寄存器中讀取操作數(shù)。執(zhí)行:進(jìn)行ALU運(yùn)算和移位操作,如果是對存儲器操作的指令,則在ALU中計算出要訪問的存儲器地址。存儲器訪問:如果是對存儲器訪
15、問的指令,用來實現(xiàn)數(shù)據(jù)緩沖功能(通過數(shù)據(jù)Cache)。寄存器回寫:將指令運(yùn)算或操作結(jié)果寫回到目標(biāo)寄存器中。9. 什么叫流水線互鎖?應(yīng)如何來解決,舉例說明。答:互鎖:當(dāng)前指令的執(zhí)行需要前面指令的執(zhí)行結(jié)果,但前面的指令沒有執(zhí)行完畢,引起流水線的等待。互鎖發(fā)生時,硬件會停止指令的執(zhí)行,直到數(shù)據(jù)準(zhǔn)備好。上邊程序中ORR指令執(zhí)行時需要使用LDR指令加載后的R4寄存器,因此造成了ORR指令的等待。編譯器以及匯編程序員可以通過重新設(shè)計代碼的順序或者其他辦法來減少互鎖的數(shù)量。第3章 ARM指令集尋址方式1.在指令編碼中,條件碼占幾位,最多有多少個條件,各個條件是如何形成的?答:條件碼占4位,最多有15個條件操
16、作碼條件助記符標(biāo)志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負(fù)數(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í)行 (指令默認(rèn)條件) 1111NV任何從不執(zhí)行(不要使用) 2. 指令條件碼中,V標(biāo)志位在什
17、么情況下才能等于1?答:V溢出標(biāo)志位對于加減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制補(bǔ)碼表示的帶符號數(shù)時,V=1表示符號位溢出,其他指令通常不影響V位。3. 在ARM指令中,什么是合法的立即數(shù)?判斷下面各立即數(shù)是否合法,如果合法則寫出在指令中的編碼格式(也就是8位常數(shù)和4位移位數(shù))0x54300x1080x3040x5010xfb100000x3340000x3FC0000x1FE00000x55800000x7F8000x39C0000x1FE80000答:立即數(shù)必須由1個8位的常數(shù)通過進(jìn)行32位循環(huán)右移偶數(shù)位得到,其中循環(huán)右移的位數(shù)由一個4位二進(jìn)制的兩倍表示。即一個8位的常數(shù)通過循環(huán)右移2*
18、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,0000,
19、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,01
20、11,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.分析邏輯右移,算術(shù)右移,循環(huán)右移,帶擴(kuò)展的循環(huán)右移它們間的差別。答:LSL邏輯左移 : LSR邏輯右移 : ASR算術(shù)右移 :ROR循環(huán)右移 : RRX帶擴(kuò)展的循環(huán)右移: 5.ARM數(shù)據(jù)處理指令具體的尋址方式有哪些,如果程序計數(shù)器PC作為目標(biāo)寄存器,會產(chǎn)生什么結(jié)果?答:數(shù)據(jù)處理指令尋
21、址方式具體可分為5種類型:1)第二操作數(shù)為立即數(shù)2)第二操作數(shù)為寄存器3)第二操作數(shù)為寄存器移位方式且移位的位數(shù)為一個5位立即數(shù)4)第二操作數(shù)為寄存器移位方式且移位數(shù)值放在寄存器中5)第二操作數(shù)位寄存器進(jìn)行RRX移位得到。如果PC (R15)用作目標(biāo)寄存器,指令會產(chǎn)生不可預(yù)知的結(jié)果。6.在Load/Store指令尋址中,字,無符號字節(jié)的Load/Store指令尋址和半字,有符號字節(jié)尋址,試分析它們之間的差別。答:在Load/Store指令尋址中,字,無符號字節(jié)的Load/Store指令尋址中共有以下3種內(nèi)存地址構(gòu)成格式:1)Addressing_mode 中的偏移量為立即數(shù) 2)Address
22、ing_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指令之間的對應(yīng)關(guān)系。答:根據(jù)堆棧指針的指向位置不同和堆棧的生長方向不同,共有4種類型的堆棧工作方式:滿遞增堆棧FA:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。滿遞減堆棧FD:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低
24、地址生成。空遞增堆棧EA:堆棧指針指向下一個要放入數(shù)據(jù)的空位置,且由低地址向高地址生成??者f減堆棧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ù)傳輸為止。當(dāng)指令執(zhí)行時,生成的地址值將寫入基址寄存器。 后變址回寫形式: <Rn>,#+/-<imm_offset8>*4內(nèi)存地址為基址寄存器Rn的值,當(dāng)存儲器操作完成后,將基地址寄存器Rn值加上/減去i
26、mm_offset8的4倍,后續(xù)的每一個地址是前一個內(nèi)存地址加4,直到協(xié)處理器發(fā)出信號,結(jié)束本次數(shù)據(jù)傳輸為止。最后將Rn值加上/減去imm_offset8的4倍寫回到基址寄存器Rn(更新基地址寄存器)。10. 寫出下列指令的機(jī)器碼,并分析指令操作功能。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-R3,
27、LR答:機(jī)器碼部分略。MOV R0,R1 ;R0-R1MOVR1,,0X198 ;R0-0X198ADDEQS R1,R2,,0xAB ;當(dāng)Z=1時,R1-R2+0xAB 并影響標(biāo)志位CMPR2,#0Xab ;R2-0xAB,并影響標(biāo)志位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有符號擴(kuò)展為32位,R2=R2-2STRBR1,R2,#0Xa0 ;【R2+0Xa0】-R1低8位
28、,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,當(dāng)目標(biāo)地址由程序標(biāo)號給出時,即:BLX <target_address>由于指令碼中是沒有條件編碼位的,所以指令是無條件執(zhí)行的。2.如何實現(xiàn)兩個64位數(shù)的加法操作,如何實現(xiàn)兩個64位數(shù)的減法操作,如何求一個64位數(shù)的負(fù)數(shù)?答:1)使用ADC實現(xiàn)64位加法,結(jié)果存于R1、R0中: ADDS R0,R0,R2 ;R0等于低32位相加,并影響標(biāo)志位 ADC R1,R1,R3;R1等于高32位相加,并加上低位進(jìn)位2)使用SBC實現(xiàn)64位減法,結(jié)果存于R1、R0中: SUBS R0,R0,R2 ;
30、低32位相減,并影響標(biāo)志位 SBC R1,R1,R3;高32位相減,并減去低位借位3)使用RSC指令實現(xiàn)求64位數(shù)值的負(fù)數(shù) : RSBS R2,R0,#0 RSC R3,R1,#03.寫出LDRB指令與LDRSB指令的二進(jìn)制編碼格式,并指出它們之間的區(qū)別。答:LDRB指令的二進(jìn)制編碼格式:LDRSB指令的二進(jìn)制編碼格式:LDRB指令用于將內(nèi)存中的一個8位字節(jié)數(shù)據(jù)讀取到指令中的目標(biāo)寄存器的低8位中,寄存器的高24位用零擴(kuò)展。LDRSB指令用于將內(nèi)存中的一個8位字節(jié)數(shù)據(jù)讀取到指令中的目標(biāo)寄存器的低8位中,寄存器的高24位用符號位擴(kuò)展。4.分析下列每條語句的功能,并確定程序段所實現(xiàn)的操作。CMP R
31、0,,0MOVEQR1,,0MOVGTR1,,1答:CMP R0,,0 ;比較R0與0的大小MOVEQR1,,0 ;若R0=0,則R1=0MOVGTR1,,1 ;若R0>0,則R1=15.請使用多種方法實現(xiàn)將字?jǐ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,R2,
32、R3(4)R0=-R0 RSB R0,R0,#07.編寫一個ARM匯編程序,累加一個隊列中的所有元素,碰到0時停止。結(jié)果放入R4。答:假設(shè)隊列為地址從R0開始遞增的字隊列:LOOPLDR R1, R0,#4!MOVS R2, R1BEQ ENDADD R4,R4,R2B LOOPEND8.寫出實現(xiàn)下列操作的ARM指令:當(dāng)Z=1時,將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0.當(dāng)Z=1時,將存儲器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0將存儲器地址為R1-4的字?jǐn)?shù)據(jù)讀入寄存器R0。將存儲器地址為R1+R6的字?jǐn)?shù)據(jù)讀入寄存器R0,并將新地址R1+R6寫入R1。答:1)LDREQ R0, R12)LDRE
33、Q 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位符號擴(kuò)展,R2=R2-2STRBR1,R2,#0xA0R1低8位->【R2+0xA0】LDMIAR0,R1,R2,R8從地址R0開始的內(nèi)存中依次讀取字?jǐn)?shù)據(jù),送入寄存器R1,R2,R8STMDBR0!,R1-R5,R10,R11將寄存器R11,R10,R5-R1的字?jǐn)?shù)據(jù),依次寫入地址R0中,每次寫入前R0=R0-410.SWP指令的優(yōu)勢是什么?答:SWP指令支持原子操作,它能在一條指令中完成存儲器和寄存器之間的數(shù)據(jù)交換。11. 如何用帶PSR操作的批量字?jǐn)?shù)據(jù)加載指令實現(xiàn)IRQ中斷的返回?答:在進(jìn)入IRQ中斷處理程序時,首先計算返回
35、地址,并保存相關(guān)的寄存器 SUBR14,R14,#4 ; STMFD R13!, R0-R3, R12, LR 如果IRQ中斷處理程序返回到被中斷的進(jìn)程則執(zhí)行下面的指令。該指令從數(shù)據(jù)棧中恢復(fù)寄存器R0R3及R12的值,將返回地址傳送到PC中,并將SPSR_irq值復(fù)制到CPSR中 LDMFD R13!, R0-R3, R12, PC 12. 用ARM匯編語言編寫代碼,實現(xiàn)將ARM處理器切換到用戶模式,并關(guān)閉中斷。答:;禁能IRQ中斷 MRS R0 CPSR ORR R0, R0,#0x80MSR CPSR, R0;切換到用戶模式 MRS R0 CPSR BIC R0, #0x0FMSR CPS
36、R, R0第5章 Thumb指令1.與32位的ARM指令集相比較,16位的Thumb指令集具有哪些優(yōu)勢?答:在ARM體系結(jié)構(gòu)中,ARM指令集是32位的,具有很高的執(zhí)行效率。但是對于嵌入式 而言,其存儲空間極其有限,由于每條ARM指令都要占用4個字節(jié),對存儲空間的要求較高。為了壓縮代碼的存儲,增加代碼存儲密度,ARM公司設(shè)計了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為負(fù)數(shù),則R0取反SUBR3,R0,R
38、2 ;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)用的方法,當(dāng)從子程序返回時,可以采用哪種返回方式?答:通常使用下面的方式之一: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為負(fù)數(shù),則R1取反SUBR1,R0 ;R1-R0->R1 (R0為全零或全1)第6章 ARM匯編偽指令與偽操作1.在ARM匯編語言程序設(shè)計中,偽操作與偽指令的區(qū)別是什么?答:偽指令是ARM處理器支持的匯編語言程序里的特殊助記符,它不再處理器運(yùn)行期間由機(jī)器執(zhí)行,只是在匯編時被合適的機(jī)器指令代替成ARM或Thumb指令,從而實現(xiàn)真正的指令操作。偽操作是ARM匯編語言程序里的一些特殊的指令助記符,其作用主要是為了完成匯編程序做各種準(zhǔn)備工作,對源程序運(yùn)行匯編程序處理,而不是在計算機(jī)運(yùn)行期間由處理器執(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)聲明一個局部的算術(shù)變量La_var 并將其初始化 0;(2)聲明一個局部的邏輯變量Ll_var 并將其初始化 FALSE;(3)聲明一個局部的字符串變量Ls_var 并將其初始化
42、空串;(4)聲明一個全局的邏輯變量Gl_var 并將其初始化 FALSE;(5)聲明一個全局的字符串變量Gs_var 并將其初始化 空串;(6)聲明一個全局的算術(shù)變量Ga_var 并將其初始化 0xAA;(7)聲明一個全局的邏輯變量Gl_var 并將其初始化 TRUE;(8)聲明一個全局的字符串變量Gs_var 并將其初始化 “CHINA”;答:(1)聲明一個局部的算術(shù)變量La_var 并將其初始化 0;LCLA La_var(2)聲明一個局部的邏輯變量Ll_var 并將其初始化 FALSE; LCLL Ll_var(3)聲明一個局部的字符串變量Ls_var 并將其初始化 空串; LCLS L
43、s_var(4)聲明一個全局的邏輯變量Gl_var 并將其初始化 FALSE; GCLL Gl_var(5)聲明一個全局的字符串變量Gs_var 并將其初始化 空串; GCLS Gs_var(6)聲明一個全局的算術(shù)變量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"
44、;4.用ARM開發(fā)工具偽操作將寄存器列表R0-R5,R7,R8的名稱定義為Reglist。答:Reglist RLST R0-R5,R7,R85.完成下列數(shù)據(jù)定義偽操作:(1)申請以data_buffer1為起始地址的連續(xù)的內(nèi)存單元,并依次用半字?jǐn)?shù)據(jù)0x11,0x22,0x33,0x44,0x55進(jìn)行初始化;(2)申請以Str_buffer為起始地址的連續(xù)的內(nèi)存單元,并用字符串“ARM7 and ARM9”進(jìn)行初始化;答:(1) data_buffer1 DCW 0x11,0x22,0x33,0x44,0x55 (2) Str_buffer DCB “ARM7 and ARM9”6.定義一個結(jié)
45、構(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進(jìn)行初始化;(2)分配一段半字內(nèi)存單元,并用0xFFE0,0xAABB,0x12進(jìn)行初始化;(3)分配一段字內(nèi)存單元, 并用0x12345678,0xAABBCCDD進(jìn)行初始化;(4)分配一段內(nèi)存單元,并用長為8字節(jié)的數(shù)值0x11填充100次
46、;答:(1)分配一段字節(jié)內(nèi)存單元,并用57,0x11,031,'Z',0x76進(jìn)行初始化; .byte 57,0x11,031,'Z',0x76(2)分配一段半字內(nèi)存單元,并用0xFFE0,0xAABB,0x12進(jìn)行初始化; .hword 0xFFE0,0xAABB,0x12(3)分配一段字內(nèi)存單元, 并用0x12345678,0xAABBCCDD進(jìn)行初始化; .word 0x12345678,0xAABBCCDD(4)分配一段內(nèi)存單元,并用長為8字節(jié)的數(shù)值0x11填充100次; .fill 100 , 8, 0x118.寫出與GNU-ARM編譯環(huán)境下偽操作.a
47、rm , .thumb 功能相同的ARM標(biāo)準(zhǔn)開發(fā)工具編譯環(huán)境下的偽操作。答:.arm 對應(yīng) ARM 或 CODE32 .thumb 對應(yīng) THUMB 或 CODE16第7章 匯編語言程序設(shè)計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 :標(biāo)號(地址) Instruction :指令(ARM/Thu
48、mb) Directive :偽操作 pseudo-instruction:偽指令GNU環(huán)境下ARM匯編語言語句格式如下: label : instructioncomment label :directivecomment label : pseudo-instructioncomment2.局部標(biāo)號提供分支指令在匯編程序的局部范圍內(nèi)跳轉(zhuǎn),它的主要用途是什么,并舉一實例加以說明。答:局部標(biāo)號 局部標(biāo)號的語法格式如下: n routname (099) 被引用的局部標(biāo)號語法規(guī)則是: % FB AT n routname 其中: n是局部標(biāo)號的數(shù)字號。(099) routname是當(dāng)前局部范圍的
49、名稱。 %表示引用操作。 F指示匯編器只向前搜索。 B指示匯編器只向后搜索。 A指示匯編器搜索宏的所有嵌套層次。 T指示匯編器搜索宏的當(dāng)前層次。 局部標(biāo)號提供分支指令在匯編程序在局部范圍內(nèi)的跳轉(zhuǎn)3.先對內(nèi)存地址0xB000開始的100個字內(nèi)存單元填入0x100000010x10000064字?jǐn)?shù)據(jù),然后將每個字單元進(jìn)行64位累加,結(jié)果保存于【R9:R8】(R9中存放高32位)。答:解:先對內(nèi)存地址0xB000開始的100個字內(nèi)存單元填入0x100000010x10000064字?jǐn)?shù)據(jù),然后將每個字單元進(jìn)行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;標(biāo)識程序入口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,進(jìn)位影響標(biāo)志位ADDCR9,R9,#0;R9=R9+C,C為進(jìn)位位SUBSR2,R2,#1BNEloop_2StopBStop;文件結(jié)束END4.在GNU環(huán)境下用ARM匯編語言編寫程序,初始化ARM處理器各模式下的堆棧指針SP_mode (R13),各模式的堆棧指針地址如下:.equ _ISR_STARTADDRE
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西職業(yè)技術(shù)學(xué)院《影視特效》2023-2024學(xué)年第一學(xué)期期末試卷
- 錦州市黑山縣2024-2025學(xué)年三年級數(shù)學(xué)第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 南開大學(xué)《試驗設(shè)計與數(shù)據(jù)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西電力職業(yè)技術(shù)學(xué)院《電視攝像基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 黔南民族醫(yī)學(xué)高等??茖W(xué)?!渡锎蠓肿与p語》2023-2024學(xué)年第二學(xué)期期末試卷
- 工程資金計劃表模板范文
- 精油美容儀問卷調(diào)查
- 激光投影施工方案范本
- 管道盲探施工方案
- 山西定向穿越施工方案
- 電復(fù)律的護(hù)理查房
- 2024年貴州現(xiàn)代物流產(chǎn)業(yè)集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 20222023八下語文提優(yōu)輔導(dǎo)02(教師+學(xué)生)
- 共和國史(自己整理-僅供參考)
- 視頻監(jiān)控維保項目投標(biāo)方案(技術(shù)標(biāo))
- NB-T 11076-2023 高壓交流故障電流限制器通用技術(shù)規(guī)范
- 整縣(市、區(qū))屋頂分布式光伏開發(fā)方案書-V5
- 透水磚鋪裝施工方案
- 《十步訊問法》讀書筆記
- GB/T 42599-2023風(fēng)能發(fā)電系統(tǒng)電氣仿真模型驗證
- 質(zhì)量問題解決方法之7鉆流程法
評論
0/150
提交評論