freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

arm嵌入式系統(tǒng)結(jié)構(gòu)與編程習(xí)題答案邱鐵著(參考版)

2025-06-25 15:41本頁(yè)面
  

【正文】 ? 用于保存被調(diào)用的子程序工作寄存器的寄存器列表。? (5)SWI和BL指令? SWI和BL指令用于內(nèi)嵌匯編時(shí),除了正常的操作數(shù)域外,還必須增加如下3個(gè)可選的寄存器列表:? 用于存放輸入的參數(shù)的寄存器列表。(4)內(nèi)存單元的分配? 內(nèi)嵌匯編器不支持匯編語言中用于內(nèi)存分配的偽操作。(3)標(biāo)號(hào)、常量及指令展開? C語言程序中的標(biāo)號(hào)可以被內(nèi)嵌的匯編指令所使用。需要注意的是,當(dāng)寄存器SP、SL、FP以及SB用作特定的用途時(shí),編譯器不能恢復(fù)這些寄存器的值。一般將寄存器R0~RR12及R14用于子程序調(diào)用存放中間結(jié)果,因此在內(nèi)嵌匯編指令中,一般不要將這些寄存器同時(shí)指定為指令中的物理寄存器。? GNU ARM編譯環(huán)境下內(nèi)嵌匯編語言ARM開發(fā)工具稍有差別,不能直接引用C語言中的變量??梢允莄har、short或int類型,而且是作為無符號(hào)數(shù)進(jìn)行操作。 ?編寫一段代碼采用C語言嵌入式匯編程序,在匯編程序中實(shí)現(xiàn)字符串的拷貝操作。答:過程調(diào)用標(biāo)準(zhǔn)ATPCS(ARMThumb Produce Call Standard)規(guī)定了子程序間相互調(diào)用的基本規(guī)則, ATPCS規(guī)定子程序調(diào)用過程中寄存器的使用規(guī)則、數(shù)據(jù)棧的使用規(guī)則及參數(shù)的傳遞規(guī)則。接下來在module_2源文件中包括module_1的 .h 文件/**/include 在module_3源文件中包括module_1的 .h 文件/**/include 這樣在module_2, module_3中就可以使用module_1中提供的int型變量xx了。答: int xx;/**/int xx=0。 如果使用全局變量,則應(yīng)通過關(guān)中斷、信號(hào)量(即P、V操作)等手段對(duì)其加以保護(hù),若不加以保護(hù),則此函數(shù)就不具有可重入性,即當(dāng)多個(gè)進(jìn)程調(diào)用此函數(shù)時(shí),很有可能使得此全局變量變?yōu)椴豢芍獱顟B(tài)。?如果使程序具有可重入性,在程序設(shè)計(jì)中應(yīng)該注意哪些問題?答:如果某個(gè)函數(shù)可以被多個(gè)任務(wù)并發(fā)使用,而不會(huì)造成數(shù)據(jù)錯(cuò)誤,我們就說這個(gè)函數(shù)具有可重入性(reentrant) 。例:如果按照下邊方式使用該宏P(guān)OWER(2+3) 則宏展開后為 2+3*2+3該宏應(yīng)修改為:define POWER(x) (x)*(x)?答:條件編譯包括了6條預(yù)處理指令ifdef, ifndef. if, elif, else, endif.。}答:程序輸出結(jié)果為:****p4=4081define POWER(x) x*x 是否合理,舉例說明。p3。p2。p1。value。 int *p1,**p2,***p3,****p4。? 為了確保x的值從真實(shí)端口獲取,聲明時(shí)應(yīng)該為? Volatile char x。//讀端口? y=x。? 以上代碼可能被編譯器優(yōu)化為? Char x=0,y=0,z=0。? x=ReadChar(0x54000000)。? x=ReadChar(0x54000000)。 如果在聲明時(shí)用“volatile”關(guān)鍵進(jìn)行修飾,遇到這個(gè)關(guān)鍵字聲明的變量,編譯器對(duì)訪問該變量的代碼就不再進(jìn)行優(yōu)化,從而可以提供特殊地址的穩(wěn)定訪問。請(qǐng)舉例說明。? 對(duì)于空位的補(bǔ)齊方式,無符號(hào)數(shù)與有符號(hào)數(shù)是有區(qū)別的。其值相當(dāng)于乘以:2“左移位數(shù)”次方。答:略,請(qǐng)說明每種運(yùn)算所對(duì)應(yīng)的ARM指令實(shí)現(xiàn)。標(biāo)識(shí)程序入口CODE32 。在ARM集成開發(fā)環(huán)境下編程:/*********寄存器使用說明***************************R0:源數(shù)據(jù)***R1:目標(biāo)數(shù)據(jù)***R2:行計(jì)數(shù)器,初值為8,遞減至0***R3:列計(jì)數(shù)器,初值為4,遞減至0**/ AREA Bit_Exch,CODE,READONLY 。答:解:使用R0指向源數(shù)據(jù)區(qū),R1指向目標(biāo)數(shù)據(jù)區(qū)。源數(shù)據(jù)右移一位 SUBS R4,R4,1 ;遞減計(jì)數(shù) BNE Bitex_LStop B Stop END:DataZone DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45以上可以看做一個(gè)8*4矩陣,請(qǐng)用ARM匯編語言在ARM集成開發(fā)環(huán)境下設(shè)計(jì)程序,實(shí)現(xiàn)對(duì)矩陣的轉(zhuǎn)置操作。輸入源數(shù)據(jù)MOV R2,0 ;目標(biāo)數(shù)據(jù)MOV R5,0 ;數(shù)據(jù)臨時(shí)緩沖區(qū)MOV R4,32 ;計(jì)數(shù)器Bitex_L32 AND R5,R1,1 ;取出源數(shù)據(jù)的最低位送R5ORR R2,R5,R2,LSL 1 ;將目標(biāo)數(shù)據(jù)左移一位,并將取出的數(shù)據(jù)。送入其最低位 MOV R0,R0,LSR 1 。聲明32位ARM指令START LDR R0,=0x55555555 。聲明代碼段Bit_Exch ENTRY 。對(duì)于【R1:R0】到【R3:R2】的64位對(duì)稱換位操作,我們可以采用R1》R2和R0》R3的兩個(gè)32位的換位操作來完成。第31位與第32位調(diào)換。將剩余的數(shù)據(jù)區(qū)以字為單位拷貝Copy_Words 。進(jìn)行塊拷貝,每次拷貝6個(gè)字Copy_6Word LDMIA R0!,{R5R10} STMIA R1!,{R5R10} SUBS R2,R2,6 BHI Copy_6Word 。聲明32位ARM指令START LDR R0,=Src 。聲明代碼段Copy_Data ENTRY 。答:解:程序設(shè)計(jì)思路:每進(jìn)行6個(gè)字的批量拷貝前,先判斷SRC_NUM是否大于6,是則進(jìn)行6字的批量拷貝并將SRC_NUM減去6,否則則進(jìn)行單字的拷貝,在使用寄存器組時(shí)還要注意保存現(xiàn)場(chǎng)。標(biāo)識(shí)程序入口 CODE32 。在ARM集成開發(fā)環(huán)境下編程:/*********寄存器使用說明***************************R0:存放地址值***R2:遞減計(jì)數(shù)器***R9:64位遞加結(jié)果的高32位***R8:64位遞加結(jié)果的低32位**/ AREA Fctrl,CODE,READONLY 。 ? 局部標(biāo)號(hào)提供分支指令在匯編程序在局部范圍內(nèi)的跳轉(zhuǎn)~0x10000064字?jǐn)?shù)據(jù),然后將每個(gè)字單元進(jìn)行64位累加,結(jié)果保存于【R9:R8】(R9中存放高32位)。? A指示匯編器搜索宏的所有嵌套層次。? F指示匯編器只向前搜索。(0~99)? routname是當(dāng)前局部范圍的名稱。ment}? Symbol :標(biāo)號(hào)(地址)? Instruction :指令(ARM/Thumb)? Directive :偽操作? pseudoinstruction:偽指令GNU環(huán)境下ARM匯編語言語句格式如下:? {label :} {instruction} {ment}? {label :} {directive} {ment}? {label :} { pseudoinstruction} {ment},它的主要用途是什么,并舉一實(shí)例加以說明。ment}? {symbol} {directive} {。答:.arm 對(duì)應(yīng) ARM 或 CODE32 .thumb 對(duì)應(yīng) THUMB 或 CODE16第7章 匯編語言程序設(shè)計(jì) ARM環(huán)境下ARM匯編語句通用格式,并分析它們的區(qū)別。Z39。Z39。Z39。答:Reglist RLST {R0R5,R7,R8}:(1)申請(qǐng)以data_buffer1為起始地址的連續(xù)的內(nèi)存單元,并依次用半字?jǐn)?shù)據(jù)0x11,0x22,0x33,0x44,0x55進(jìn)行初始化;(2)申請(qǐng)以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”,其首地址固定為0x900,該結(jié)構(gòu)化內(nèi)存表包含2個(gè)域,F(xiàn)datal長(zhǎng)度為8個(gè)字節(jié),F(xiàn)data2長(zhǎng)度為160個(gè)字節(jié)。通常,編譯器用一條ADD指令或SUB指令來實(shí)現(xiàn)該ADR偽指令的功能,若不能用一條指令實(shí)現(xiàn),則產(chǎn)生錯(cuò)誤,編譯失敗。ADR偽指令將基于PC相對(duì)偏移的地址值或基于寄存器相對(duì)偏移的地址值讀取到寄存器中。在匯編編譯器編譯源程序時(shí),ADRL偽指令被編譯器替換成兩條合適的指令。如果加載的常數(shù)不符合MOV或MVN指令立即數(shù)的要求,匯編器將常量放入內(nèi)存文字池,并使用一條程序相對(duì)偏移的LDR指令從內(nèi)存文字池讀出常量。答: LDR偽指令將一個(gè)32位的常數(shù)或者一個(gè)地址值讀取到寄存器中,可以看作是加載寄存器的內(nèi)容。也就是說,這些偽操作只是在匯編過程中起作用,一旦匯編結(jié)束,偽操作也就隨之消失。需要在子程序中使用PUSH {LR}:ASR R0,R1,31 EOR R1,R0SUB R1,R0答:ASR R0,R1,31 ;用R1的符號(hào)位填充R0EOR R1,R0 ;如果R1為正數(shù),則R1不變;如果R1為負(fù)數(shù),則R1取反SUB R1,R0 ;R1R0R1 (R0為全零或全1)第6章 ARM匯編偽指令與偽操作,偽操作與偽指令的區(qū)別是什么?答:偽指令是ARM處理器支持的匯編語言程序里的特殊助記符,它不再處理器運(yùn)行期間由機(jī)器執(zhí)行,只是在匯編時(shí)被合適的機(jī)器指令代替成ARM或Thumb指令,從而實(shí)現(xiàn)真正的指令操作。.global _start.text.equ num 20_start: MOV SP,0x400 ADR R0,Thumb_start+1 BX R0.thumbThumb_start: ASR R2,R0,31 EOR R0,R2 SUB R3,R0,R2stop: B stop.end答:上述代碼首先將處理器狀態(tài)切換到Thumb狀態(tài),ASR R2,R0,31 。答:Thumb指令可分為數(shù)據(jù)處理指令,存儲(chǔ)器操作指令,分支指令,軟中斷指令。Thumb代碼所需的存儲(chǔ)空間約為ARM代碼的60%~70%。但是對(duì)于嵌入式 而言,其存儲(chǔ)空間極其有限,由于每條ARM指令都要占用4個(gè)字節(jié),對(duì)存儲(chǔ)空間的要求較高。該指令從數(shù)據(jù)棧中恢復(fù)寄存器R0~R3及R12的值,將返回地址傳送到PC中,并將SPSR_irq值復(fù)制到CPSR中? LDMFD R13!, {R0R3, R12, PC}^ 12. 用ARM匯編語言編寫代碼,實(shí)現(xiàn)將ARM處理器切換到用戶模式,并關(guān)閉中斷。11. 如何用帶PSR操作的批量字?jǐn)?shù)據(jù)加載指令實(shí)現(xiàn)IRQ中斷的返回?答:在進(jìn)入IRQ中斷處理程序時(shí),首先計(jì)算返回地址,并保存相關(guān)的寄存器?
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1