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

正文內(nèi)容

arm嵌入式系統(tǒng)結(jié)構(gòu)與編程習題答案邱鐵著-資料下載頁

2025-06-22 15:41本頁面
  

【正文】 10。將剩余的數(shù)據(jù)區(qū)以字為單位拷貝Copy_Words 。拷貝剩余字節(jié) LDR R3,[R0],4 STR R3,[R1],4 SUBS R2,R2,1 BNE Copy_WordStop B Stop LTORGSrc DCD 1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF,0x10DCD 1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF,0x10Dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END【R1:R0】中的64位數(shù)據(jù)(其中R1中存放高32位)的高位和低位對稱換位,如第0位與第63位調(diào)換,第1位與第62位調(diào)換,第2位與第61位調(diào)換。第31位與第32位調(diào)換。答:解:程序設計思路:對于單個32位寄存器的對稱換位操作,我們可以采用移位操作的方法,通過依次從低位取出目標寄存器的各個位,再將其放置到目標寄存器的最低位,然后通過移位操作,送入相應位。對于【R1:R0】到【R3:R2】的64位對稱換位操作,我們可以采用R1》R2和R0》R3的兩個32位的換位操作來完成。在ARM集成開發(fā)環(huán)境下編程:/*********寄存器使用說明***************************R1,R0:源數(shù)據(jù)***R3,R2:目標數(shù)據(jù)***R4:計數(shù)器,初值為32,遞減至0**/ AREA Bit_Exch,CODE,READONLY 。聲明代碼段Bit_Exch ENTRY 。標識程序入口CODE32 。聲明32位ARM指令START LDR R0,=0x55555555 。輸入源數(shù)據(jù) MOV R3,0 ;目標數(shù)據(jù)MOV R5,0 ;數(shù)據(jù)臨時緩沖區(qū) MOV R4,32 ;計數(shù)器Bitex_H32 AND R5,R0,1 ;取出源數(shù)據(jù)的最低位送R5ORR R3,R5,R3,LSL 1 ;將目標數(shù)據(jù)左移一位,并將取出的數(shù)據(jù)。送入其最低位 MOV R0,R0,LSR 1 。源數(shù)據(jù)右移一位 SUBS R4,R4,1 ;遞減計數(shù) BNE Bitex_LLDR R1,=0x55555555 。輸入源數(shù)據(jù)MOV R2,0 ;目標數(shù)據(jù)MOV R5,0 ;數(shù)據(jù)臨時緩沖區(qū)MOV R4,32 ;計數(shù)器Bitex_L32 AND R5,R1,1 ;取出源數(shù)據(jù)的最低位送R5ORR R2,R5,R2,LSL 1 ;將目標數(shù)據(jù)左移一位,并將取出的數(shù)據(jù)。送入其最低位 MOV R1,R1,LSR 1 。源數(shù)據(jù)右移一位 SUBS R4,R4,1 ;遞減計數(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以上可以看做一個8*4矩陣,請用ARM匯編語言在ARM集成開發(fā)環(huán)境下設計程序,實現(xiàn)對矩陣的轉(zhuǎn)置操作。如果改為在GNU ARM環(huán)境下編程,程序應如何修改。答:解:使用R0指向源數(shù)據(jù)區(qū),R1指向目標數(shù)據(jù)區(qū)。從源數(shù)據(jù)區(qū)中按列取數(shù)據(jù)(每次取8個),然后順序存入目標數(shù)據(jù)區(qū)。在ARM集成開發(fā)環(huán)境下編程:/*********寄存器使用說明***************************R0:源數(shù)據(jù)***R1:目標數(shù)據(jù)***R2:行計數(shù)器,初值為8,遞減至0***R3:列計數(shù)器,初值為4,遞減至0**/ AREA Bit_Exch,CODE,READONLY 。聲明代碼段Bit_Exch ENTRY 。標識程序入口CODE32 。聲明32位ARM指令START LDR R0,=Src LDR R1,=Dst MOV R3,4COL MOV R2,8ROW LDR R4,[R0],16 ;按列取數(shù)據(jù) STR R4,[R1],4 ;按行存數(shù)據(jù) SUBS R2,R2,1 ;行計數(shù)遞減 BNE ROWSUBS R3,R3,1 ;列計數(shù)遞減 BNE COLStop B Stop END第8章 ARM匯編語言與嵌入式C混合編程,寫一個C語言程序,實現(xiàn)將一個二維數(shù)組內(nèi)的數(shù)據(jù)行和列進行排序。答:略,請說明每種運算所對應的ARM指令實現(xiàn)。答:移位操作分為左移操作與右移操作左移運算符“”實現(xiàn)將“”左邊的操作數(shù)的各個二進制位向左移動“”右邊操作數(shù)所指定的位數(shù),高位丟棄,低位補0。其值相當于乘以:2“左移位數(shù)”次方。 右移運算符“”實現(xiàn)將“”左邊的操作數(shù)的各個二進制位向右移動“”右邊操作數(shù)所指定的位數(shù)。? 對于空位的補齊方式,無符號數(shù)與有符號數(shù)是有區(qū)別的。? 對無符號數(shù)進行右移時,低位丟棄,高位用0補齊,其值相當于除以:2“右移位數(shù)”次方 ? 對有符號數(shù)進行右移時,根據(jù)處理器的不同選擇邏輯右移或算術(shù)右移。請舉例說明。答:volatile的本意為 “暫態(tài)的”或.“易變的”,該說明符起到抑制編譯器優(yōu)化的作用。 如果在聲明時用“volatile”關(guān)鍵進行修飾,遇到這個關(guān)鍵字聲明的變量,編譯器對訪問該變量的代碼就不再進行優(yōu)化,從而可以提供特殊地址的穩(wěn)定訪問。 ? 例:硬件端口寄存器讀取? Char x=0,y=0,z=0。? x=ReadChar(0x54000000)。//讀端口? y=x。? x=ReadChar(0x54000000)。//再讀端口? z=x。? 以上代碼可能被編譯器優(yōu)化為? Char x=0,y=0,z=0。? x=ReadChar(0x54000000)。//讀端口? y=x。? z=x。? 為了確保x的值從真實端口獲取,聲明時應該為? Volatile char x。? Char y,z。includemain(){ int value=0xFF1。 int *p1,**p2,***p3,****p4。 p1=amp。value。 p2=amp。p1。 p3=amp。p2。 p4=amp。p3。 printf(****p4=%d\n,****p4)。}答:程序輸出結(jié)果為:****p4=4081define POWER(x) x*x 是否合理,舉例說明。如果不合理,應如何更改?答:define POWER(x) x*x 不合理;對于帶參數(shù)的宏,其參數(shù)應該用括號括起來。例:如果按照下邊方式使用該宏P(guān)OWER(2+3) 則宏展開后為 2+3*2+3該宏應修改為:define POWER(x) (x)*(x)?答:條件編譯包括了6條預處理指令ifdef, ifndef. if, elif, else, endif.。條件編譯的功能在于對源程序中的一部分內(nèi)容只有滿足某種條件的情況下才進行編譯。?如果使程序具有可重入性,在程序設計中應該注意哪些問題?答:如果某個函數(shù)可以被多個任務并發(fā)使用,而不會造成數(shù)據(jù)錯誤,我們就說這個函數(shù)具有可重入性(reentrant) ??芍厝牒瘮?shù)可以使用局部變量,也可以使用全局變量。 如果使用全局變量,則應通過關(guān)中斷、信號量(即P、V操作)等手段對其加以保護,若不加以保護,則此函數(shù)就不具有可重入性,即當多個進程調(diào)用此函數(shù)時,很有可能使得此全局變量變?yōu)椴豢芍獱顟B(tài)。 , module_2, module_3, 要求在模塊module_1中提供可供模塊module_2, module_3使用的int型變量xx,請寫出模塊化程序設計框架。答: int xx;/**/int xx=0。 文件中聲明xx為外部變量/**/extern int xx。接下來在module_2源文件中包括module_1的 .h 文件/**/include 在module_3源文件中包括module_1的 .h 文件/**/include 這樣在module_2, module_3中就可以使用module_1中提供的int型變量xx了。 與 AAPCS的全稱是是什么,它們有什么差別?掌握子程序調(diào)用過程中寄存器的使用規(guī)則,數(shù)據(jù)棧的使用規(guī)則及參數(shù)的傳遞規(guī)則,在具體的函數(shù)中能夠熟練應用。答:過程調(diào)用標準ATPCS(ARMThumb Produce Call Standard)規(guī)定了子程序間相互調(diào)用的基本規(guī)則, ATPCS規(guī)定子程序調(diào)用過程中寄存器的使用規(guī)則、數(shù)據(jù)棧的使用規(guī)則及參數(shù)的傳遞規(guī)則。 2007年,ARM公司推出了新的過程調(diào)用標準AAPCS(ARM Architecture Produce Call Standard),它只是改進了原有的ATPCS的二進制代碼的兼容性。 ?編寫一段代碼采用C語言嵌入式匯編程序,在匯編程序中實現(xiàn)字符串的拷貝操作。答:內(nèi)嵌匯編的局限性(1)操作數(shù)? ARM開發(fā)工具編譯環(huán)境下內(nèi)嵌匯編語言,指令操作數(shù)可以是寄存器、常量或C語言表達式??梢允莄har、short或int類型,而且是作為無符號數(shù)進行操作。 ? 當表達式過于復雜時需要使用較多的物理寄存器,有可能產(chǎn)生沖突。? GNU ARM編譯環(huán)境下內(nèi)嵌匯編語言ARM開發(fā)工具稍有差別,不能直接引用C語言中的變量。 (2)物理寄存器不要直接向程序計數(shù)器PC賦值,程序的跳轉(zhuǎn)只能通過B或BL指令實現(xiàn)。一般將寄存器R0~RR12及R14用于子程序調(diào)用存放中間結(jié)果,因此在內(nèi)嵌匯編指令中,一般不要將這些寄存器同時指定為指令中的物理寄存器。在內(nèi)嵌的匯編指令中使用物理寄存器時,如果有C語言變量使用了該物理寄存器,則編譯器將在合適的時候保存并恢復該變量的值。需要注意的是,當寄存器SP、SL、FP以及SB用作特定的用途時,編譯器不能恢復這些寄存器的值。通常在內(nèi)嵌匯編指令中不要指定物理寄存器,因為有可能會影響編譯器分配寄存器,進而可能影響代碼的效率。(3)標號、常量及指令展開? C語言程序中的標號可以被內(nèi)嵌的匯編指令所使用。但是只有B指令可以使用C語言程序中的標號,BL指令不能使用C語言程序中的標號。(4)內(nèi)存單元的分配? 內(nèi)嵌匯編器不支持匯編語言中用于內(nèi)存分配的偽操作。所用的內(nèi)存單元的分配都是通過C語言程序完成的,分配的內(nèi)存單元通過變量以供內(nèi)嵌的匯編器使用。? (5)SWI和BL指令? SWI和BL指令用于內(nèi)嵌匯編時,除了正常的操作數(shù)域外,還必須增加如下3個可選的寄存器列表:? 用于存放輸入的參數(shù)的寄存器列表。? 用于存放返回結(jié)果的寄存器列表。? 用于保存被調(diào)用的子程序工作寄存器的寄存器列表。
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1