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

正文內(nèi)容

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

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

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