日韩av色在线_av不卡在线观看_亚洲国产精品第一页_在线看日本不卡_色成人综合网_国产丝袜在线视频_国产精成人品localhost_国产91富婆露脸刺激对白_韩国视频一区_国产精品人成电影

Hi,歡迎來(lái)到嵌入式培訓(xùn)高端品牌 - 華清遠(yuǎn)見教育科技集團(tuán)<北京總部官網(wǎng)>,專注嵌入式工程師培養(yǎng)15年!
當(dāng)前位置: > 華清遠(yuǎn)見教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > ARM的位置無(wú)關(guān)程序設(shè)計(jì)
ARM的位置無(wú)關(guān)程序設(shè)計(jì)
時(shí)間:2017-01-04作者:華清遠(yuǎn)見

ARM處理器支持位置無(wú)關(guān)的程序設(shè)計(jì),這種程序加載到存儲(chǔ)器的任意地址空間都可以正常運(yùn)行,其設(shè)計(jì)方法在嵌入式應(yīng)用系統(tǒng)開發(fā)中具有重要的作用。尤其在裸機(jī)狀態(tài)下開發(fā)Bootloader程序及進(jìn)行內(nèi)核初始化設(shè)計(jì);利用位置無(wú)關(guān)的程序設(shè)計(jì)方法還可以在具體應(yīng)用中用于構(gòu)建高效率動(dòng)態(tài)鏈接庫(kù),因而了解位置無(wú)關(guān)的程序設(shè)計(jì)方法,有助于開發(fā)人員設(shè)計(jì)出結(jié)構(gòu)簡(jiǎn)單、清晰的應(yīng)用程序。

應(yīng)用程序必須經(jīng)過(guò)編譯、匯編和鏈接后才變成可執(zhí)行文件,在鏈接時(shí),要對(duì)所有目標(biāo)文件進(jìn)行重定位(relocation),建立符號(hào)引用規(guī)則,同時(shí)為變量、函數(shù)等分配運(yùn)行地址。當(dāng)程序執(zhí)行時(shí),系統(tǒng)必須把代碼加載到鏈接時(shí)所指定的地址空間,以保證程序在執(zhí)行過(guò)程中對(duì)變量、函數(shù)等符號(hào)的正確引用,使程序正常運(yùn)行。在具有操作系統(tǒng)的系統(tǒng)中,重定位過(guò)程由操作系統(tǒng)自動(dòng)完成。

在設(shè)計(jì)Bootloader程序時(shí),必須在裸機(jī)環(huán)境中進(jìn)行,這時(shí)Bootloader映像文件的運(yùn)行地址必須由程序員設(shè)定。通常情況下,將Bootloader程序下載到ROM的0x0地址進(jìn)行啟動(dòng),而在大多數(shù)應(yīng)用系統(tǒng)中,為了快速啟動(dòng),首先將Bootloader程序拷貝到SDRAM中再運(yùn)行。一般情況下,這兩者的地址并不相同,程序在SDRAM中的地址重定位過(guò)程必須由程序員完成。實(shí)際上,由于Bootloader是系統(tǒng)上電后要執(zhí)行的第一段程序,Bootloader程序的拷貝和在這之前的所有工作都必須由其自身來(lái)完成,而這些指令都是在ROM中執(zhí)行的。也就是說(shuō),這些代碼即使不在鏈接時(shí)所指定的運(yùn)行時(shí)地址空間,也可以正確執(zhí)行。這就是位置無(wú)關(guān)代碼,它是一段加載到任意地址空間都能正常執(zhí)行的特殊代碼。

位置無(wú)關(guān)代碼常用于以下場(chǎng)合:
        程序在運(yùn)行期間動(dòng)態(tài)加載到內(nèi)存;
        程序在不同場(chǎng)合與不同程序組合后加載到內(nèi)存(如共享的動(dòng)態(tài)鏈接庫(kù));
        在運(yùn)行期間不同地址相互之間的映射(如Bootloader程序)。

雖然在用GCC編譯時(shí),使用-fPIC選項(xiàng)可為C語(yǔ)言產(chǎn)生位置無(wú)關(guān)代碼,但這并不能修正程序設(shè)計(jì)中固有的位置相關(guān)性缺陷。特別是匯編語(yǔ)言代碼,必須由程序員遵循一定的程序設(shè)計(jì)準(zhǔn)則,才能保證程序的位置無(wú)關(guān)性。

ARM程序的位置無(wú)關(guān)可執(zhí)行文件PIE(PositionIndependent Executable)包括位置無(wú)關(guān)代碼PIC和位置無(wú)關(guān)數(shù)據(jù)PID(PositionIndependent Data)兩部分。

PID主要針對(duì)可讀寫數(shù)據(jù)段(.data段),其中保存已賦初值的全局變量。為實(shí)現(xiàn)其位置無(wú)關(guān)性,通常使用寄存器R9作為靜態(tài)基址寄存器,使其指向該可讀寫段的首地址,并使用相對(duì)于基址寄存器的偏移量來(lái)對(duì)該段的變量進(jìn)行尋址。這種方法常用于為可重入程序的多個(gè)實(shí)例產(chǎn)生多個(gè)獨(dú)立的數(shù)據(jù)段。在程序設(shè)計(jì)中,一般不必考慮可讀寫段的位置無(wú)關(guān)性,這主要是因?yàn)榭勺x寫數(shù)據(jù)主要分配在SDRAM中。

PIC包括程序中的代碼和只讀數(shù)據(jù)(.text段),為保證程序能在ROM和SDRAM空間都能正確運(yùn)行(如裸機(jī)狀態(tài)下的Bootloader程序),必須采用位置無(wú)關(guān)代碼程序設(shè)計(jì)。

PIC遵循只讀段位置無(wú)關(guān)ROPI(ReadOnly Position Independence)的ATPCS(ARMThumb Procedure Call Standard)的程序設(shè)計(jì)規(guī)范:

(1) 程序設(shè)計(jì)規(guī)范1  

引用同一ROPI段或相對(duì)位置固定的另一ROPI段中的符號(hào)時(shí),必須是基于PC的符號(hào)引用,即使用相對(duì)于當(dāng)前PC的偏移量來(lái)實(shí)現(xiàn)跳轉(zhuǎn)或進(jìn)行常量訪問(wèn)。  

① 位置無(wú)關(guān)的程序跳轉(zhuǎn)。在ARM匯編程序中,使用相對(duì)跳轉(zhuǎn)指令B/BL實(shí)現(xiàn)程序跳轉(zhuǎn)。指令中所跳轉(zhuǎn)的目標(biāo)地址用基于當(dāng)前PC的偏移量來(lái)表示,與鏈接時(shí)分配給地址標(biāo)號(hào)的絕對(duì)地址值無(wú)關(guān),因而代碼可以在任何位置進(jìn)行跳轉(zhuǎn),實(shí)現(xiàn)位置無(wú)關(guān)性。  

另外,還可使用ADR或ADRL偽指令將地址標(biāo)號(hào)值讀取到PC中實(shí)現(xiàn)程序跳轉(zhuǎn)。這是因?yàn)锳DR或ADRL等偽指令會(huì)被編譯器替換為對(duì)基于PC的地址值進(jìn)行操作,但這種方式所能讀取的地址范圍較小,并且會(huì)因地址值是否為字對(duì)齊而異。  

但在ARM程序中,使用LDR等指令直接將地址標(biāo)號(hào)值讀取到PC中實(shí)現(xiàn)程序跳轉(zhuǎn)不是位置無(wú)關(guān)的。例如:  LDR PC, =main  

上面的偽指令編譯后的結(jié)果為:  LDR PC, [PC, OFFSET_TO_LPOOL]
?蟆 ?                                                            LPOOL 
                                                                                DCD main  

可見,雖然LDR是把基于PC的一個(gè)存儲(chǔ)單元LPOOL的內(nèi)容加載到PC中,但該存儲(chǔ)單元中保存的卻是鏈接時(shí)所決定的main函數(shù)入口的絕對(duì)地址,所以main函數(shù)實(shí)際所在的段不是位置無(wú)關(guān)。  

② 位置無(wú)關(guān)的常量訪問(wèn)。在應(yīng)用程序中,經(jīng)常要讀寫相關(guān)寄存器以完成必要的硬件初始化。為增強(qiáng)程序的可讀性,利用EQU偽指令對(duì)一些常量進(jìn)行賦值,但在訪問(wèn)過(guò)程中,必須實(shí)現(xiàn)位置無(wú)關(guān)性。下面以PXA270的GPIO初始化介紹位置無(wú)關(guān)的常量訪問(wèn)方法。

GPIO_BASE EQU 0x40e00000; GPIO基址寄存器地址
        GPDR0 EQU 0x00c; 相對(duì)于GPIO基址寄存器的偏移量
        init_GPDR0 EQU 0xfffbfe00; 寄存器GPDR0初值
        LDR R1, =GPIO_BASE  
        LDR R0, =init_GPDR0
        STR R0, [R1, #GPDR0]

上述匯編代碼段經(jīng)編譯后的結(jié)果為:

LDR R1, [PC, OFFSET_TO_GPIO_BASE]
        LDR R0, [PC, OFFSET_TO_init_GPDR0]
        STR R0, [R1, #0xc]??
        GPIO_BASE
        DCD 0x40e00000 
        GPDR0
        DCD 0x00c 
        init_GPDR0
        DCD 0xfffbfe00  

可見,LDR偽指令實(shí)際上使用基于PC的偏移量來(lái)對(duì)符號(hào)常量GPIO_BASE和init_GPDR0進(jìn)行引用,因而是位置無(wú)關(guān)的。由此可以得出如下結(jié)論:使用LDR偽指令將一個(gè)常量讀取到非PC的其他通用寄存器中可實(shí)現(xiàn)位置無(wú)關(guān)的常量訪問(wèn);但將一個(gè)地址值讀取到PC中進(jìn)行程序跳轉(zhuǎn)時(shí),跳轉(zhuǎn)目標(biāo)則是位置相關(guān)的。

(2) 程序設(shè)計(jì)規(guī)范2  

其他被ROPI段中的代碼引用的必須是絕對(duì)地址,或者是基于可讀寫位置無(wú)關(guān)(RWPI)段的靜態(tài)基址寄存器的可寫數(shù)據(jù)。  

使用絕對(duì)地址只能引用被重定位到特定位置的代碼段中的符號(hào),通過(guò)在位置無(wú)關(guān)代碼中引入絕對(duì)地址,可以讓程序跳轉(zhuǎn)到指定位置。例如,假設(shè)Bootloader的階段1將其自身代碼拷貝到鏈接時(shí)所指定的SDRAM地址空間后,當(dāng)要跳轉(zhuǎn)到階段2的C程序入口時(shí),可以使用指令“LDR PC, =main”跳轉(zhuǎn)到程序在SDRAM中的main函數(shù)入口地址開始執(zhí)行。這是因?yàn)槌绦蛟诰幾g鏈接時(shí)給main函數(shù)分派絕對(duì)地址,系統(tǒng)通過(guò)將main函數(shù)的絕對(duì)地址直接賦給PC實(shí)現(xiàn)程序跳轉(zhuǎn)。如果使用相對(duì)跳轉(zhuǎn)指令“B main”,那么只會(huì)跳轉(zhuǎn)到啟動(dòng)ROM內(nèi)部的main函數(shù)入口。

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)
欧美日韩怡红院| 综合国产视频| 欧美三级电影在线| 一区二区三区成人精品| 久久精品国产亚洲一区二区三区| 在线播放/欧美激情| 成人精品在线视频| 欧美成人午夜精品免费| 人人澡人人透人人爽| 福利片一区二区| 国产一区二区三区免费观看| 偷拍与自拍一区| 中文字幕日韩一区| 久久最新资源网| 中文字幕一区二区三区四| av色男福利网| 欧美精品影院| 精品毛片三在线观看| 国产精品久久九九| 欧美三级韩国三级日本三斤在线观看 | 国产av无码专区亚洲av麻豆| 中文字幕丰满孑伦无码专区| 中文字幕无码毛片免费看| 日韩精品视频一区二区在线观看| 91亚洲精华国产精华| 欧美性受xxxx黑人猛交| 欧美富婆性猛交| 香蕉久久久久久久| 欧美午夜视频在线| 欧美在线一级视频| 精品久久久久久久久久久久久久久 | 91麻豆福利| 精品人妻一区二区三区日产乱码| 国产激情视频网站| av日韩一区二区三区| 97视频资源在线观看| 久久av资源网站| 日韩一区二区不卡| 亚洲国产中文字幕在线视频综合| 成人国产精品免费观看| 欧美久久久久| 国产美女亚洲精品7777| 怡红院红怡院欧美aⅴ怡春院| 国产专区视频| 国产成人福利| 手机在线观看免费av| 日韩精品国产一区二区| 欧美日韩成人影院| 黄色在线观看国产| 久久精品国产亚洲av麻豆蜜芽| 中文字幕在线网站| 亚洲国产一区二区久久久777| 在线观看xxxxvideo| eeuss影院在线观看第一页| 亚洲欧洲动漫| 成人高清免费在线| 天天综合网站| 色棕色天天综合网| 国产精品sm| 欧美激情精品久久久久久黑人 | 97超碰国产精品女人人人爽| 精品视频www| 欧美一三区三区四区免费在线看| 亚洲影院久久精品| 欧美国产精品久久| 91麻豆国产自产在线观看| 麻豆久久精品| 国内自拍视频一区二区三区| 国产中文精品久高清在线不| 日韩三级网址| 国产电影一区二区三区爱妃记| 四虎影院观看视频在线观看 | 国产偷国产偷亚洲清高网站| 欧美午夜精品免费| 国产精品免费久久| 国产亚洲精品aa| 99九九99九九九视频精品| 久久黄色级2电影| 久久免费高清| 亚洲精品美女91| 亚洲激情网站| 99综合视频| 国产亚洲在线| 亚洲美女色禁图| 黄色日韩在线| 精品中文字幕一区| 冲田杏梨av在线| 亚洲欧美卡通动漫| 国产精品毛片一区二区在线看舒淇 | 熟妇高潮一区二区高潮| 成年网址网站在线观看| 久久免费看视频| 狠狠干狠狠插| 欧美在线一卡| 日日夜夜天天综合| 亚洲国产精品欧美一二99| 亚洲综合丝袜美腿| 亚洲va欧美va人人爽| 亚洲一区av在线| 亚洲一级二级在线| 懂色av一区二区三区| 精品免费在线观看| 欧美这里有精品| 555夜色666亚洲国产免| 欧美精品一区男女天堂| 日韩精品在线观| 最好看的2019年中文视频| 精品视频久久久| 国产一区二区三区在线看| 中文字幕亚洲一区二区三区五十路| 中文字幕亚洲一区| 国外成人在线直播| 国产日本欧美视频| 国产乱子伦精品| 色中文字幕在线观看| 800av在线免费观看| 欧美日韩中文在线视频| 99久久99精品| 免费看91的网站| 欧美色图17p| 制服.丝袜.亚洲.中文.综合懂色| 中文区中文字幕免费看| 欧美 日韩 国产 成人 在线| 亚洲成a人片77777老司机| 玖玖精品国产| 国产精品一国产精品| 午夜精品久久久久久久99老熟妇 | 日本小视频在线免费观看| 日韩欧美ww| 99视频一区二区三区| 91精品国产91久久久久久一区二区| 久久久久久有精品国产| 国产二区视频在线播放| 国产亚洲精品久久久久久打不开| 欧美色图888| av黄色在线| 91亚洲国产| 亚洲精品欧美日韩| 欧洲久久久久久| 成人精品一区二区三区校园激情| 欧美色网一区| 男女av一区三区二区色多| avav在线播放| 日韩一级免费看| 国产精品一级无码| 九九视频免费看| 成 人 免费 黄 色| 日日摸.com| 免费a级毛片在线观看| 一二三四视频在线中文| 欧美美女在线直播| 亚洲在线日韩| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美视频一二三| 色94色欧美sute亚洲线路二| 国产在线精品一区二区夜色| 国内久久精品视频| 亚洲视频免费在线观看| 欧美一级xxx| 欧美肥婆姓交大片| 久久青青草综合| 欧美做暖暖视频| 亚洲综合自拍网| 男人日女人网站| 国产免费高清| 国产精品视频二区三区| 欧美日韩破处视频| 亚洲另类视频| 国产精品麻豆久久久| 欧美一区二区在线看| 黄色小视频免费观看| 免费大片黄在线| 亚洲国产天堂| 久久影音资源网| 欧美刺激性大交免费视频| 人妻丰满熟妇av无码区app| 国产人妻精品一区二区三| 国产日本在线观看| 久久精品伊人| 日韩午夜精品视频| 亚欧精品在线| 影音先锋亚洲天堂| 美国成人av| 亚洲天天影视网| 欧美xxxxx精品| 手机毛片在线观看| 神马久久久久久久久| 免费在线超碰| 色棕色天天综合网| 黄色av网址在线播放| 国产一级特黄aaa大片| 成人午夜电影在线观看| 另类天堂av| 欧美精品三级日韩久久| 在线码字幕一区| 国产精品无码AV| 性欧美hd调教| 久久久久久久精| 性欧美办公室18xxxxhd| 国产熟妇搡bbbb搡bbbb| 成片免费观看| 欧美精选视频在线观看| 欧美性生活影院| 日本一区免费| 中文字幕在线2018| jizz内谢中国亚洲jizz| 久久综合九色综合欧美98| 97免费视频在线播放| 国产又黄又粗又猛又爽的视频| 在线免费观看av电影| 精品久久久久久久| 欧美日韩大陆一区二区| 一区二区不卡在线| 中文字幕+乱码+中文| 里番在线播放| 97se狠狠狠综合亚洲狠狠| 91精品国产高清自在线看超| 成人小视频免费看| 在线视频毛片| 国产一区二区三区四区在线观看| 色综合91久久精品中文字幕| 日本精品一二三区| 日本不卡1区2区3区| 伊人久久久大香线蕉综合直播| 精品福利一区二区三区免费视频| 18岁视频在线观看| 国产精品免费麻豆入口| 国产欧美一区二区精品久久久| 青草青青在线视频| 蜜臀尤物一区二区三区直播| 情趣网站在线观看| 午夜免费一区| 色狠狠色噜噜噜综合网| 97碰碰视频| 国产人与禽zoz0性伦| 亚洲综合色站| 欧美性生活久久| 日本手机在线视频| 你懂的视频网址| 精品999成人| av网站免费线看精品| 欧美亚洲视频一区二区| 精品在线观看一区| 午夜视频在线免费观看| 国产午夜精品一区二区| 97人人干人人| 亚洲欧美日韩激情| 91精品视频一区二区| 黑人巨大精品欧美一区免费视频| 国产在线视频综合| 国产美女在线一区二区三区| 久久密一区二区三区| 黄色录像免费观看| 中国女人内谢25xxxx免费视频| 成人午夜888| 最新不卡av在线| 国产日韩av在线| 日日碰狠狠添天天爽| 午夜影院免费看| 黄色在线一区| 91精品国产综合久久久蜜臀图片 | 深夜视频在线观看| 欧美1区二区三区公司| 青青伊人久久| 亚洲欧洲精品一区二区精品久久久| 亚洲日本成人女熟在线观看| 欧美xxxxx在线视频| 小说区图片区综合久久亚洲| 国产免费区一区二区三视频免费| 丁香婷婷激情| 制服丝袜日韩| 色综合久久99| 欧美lavv| 国产香蕉视频在线| 久久精品视频观看| 国产精品一二三四五| 欧美激情精品久久久久久蜜臀| 深田咏美中文字幕| 欧美18—20岁hd第一次| 牛夜精品久久久久久久99黑人| 色婷婷av久久久久久久| 欧美一区二区三区四区夜夜大片| 一区二区三区麻豆| 亚洲欧美韩国| 国产精品久久久久aaaa樱花 | 夜夜躁日日躁狠狠久久av| 欧美精品一级二级| 国产亚洲视频一区| 国模吧精品人体gogo| 久久夜色精品国产噜噜av | 1区1区3区4区产品乱码芒果精品| 国产aⅴ爽av久久久久成人| 日韩一区二区三区色| 亚洲人成在线免费观看| 精品国产视频在线观看| 成人亚洲网站| 国产一区二区三区丝袜| 青青草精品在线视频| jizzjizz少妇亚洲水多| 亚洲精品少妇网址| 成人免费精品动漫网站| 久久伊人国产| 自拍偷拍亚洲在线| 美女又爽又黄免费视频| 祥仔av免费一区二区三区四区| 亚洲精品综合精品自拍| 欧美成人精品欧美一级| 巨胸喷奶水www久久久| 亚洲天堂成人在线| 久久免费视频播放| 久久久久伊人| 日韩亚洲成人av在线| 无码人妻精品一区二区50| 91精品国产色综合久久不卡粉嫩| 亚洲欧美制服中文字幕| 永久久久久久久| heyzo高清在线| 欧美成人福利视频| 破处女黄色一级片| 亚洲va久久久噜噜噜久久| 欧美精品videos另类日本| 国产在成人精品线拍偷自揄拍| 香蕉视频国产精品| 国产原创欧美精品| 高h放荡受浪受bl| 老鸭窝毛片一区二区三区 | 黄色成人av网站| 91chinesevideo永久地址| 久久伊人成人网| 国内自拍亚洲| 日韩欧美国产不卡| 国产精品亚洲一区| 天堂√最新版中文在线| 国产成人亚洲综合青青| 激情文学亚洲色图| 婷婷午夜社区一区| 久久精品最新地址| 亚洲av毛片成人精品| 另类小说视频一区二区| 日本免费成人网| 午夜成年人在线免费视频| 亚洲精品黄网在线观看| 伊人免费在线观看高清版| 久久免费高清| 欧美国产视频一区| 最新超碰在线| 国产一区二区三区精品久久久| 国产av一区二区三区| 激情综合网av| 黄色一级大片在线观看| 在线观看欧美日韩电影| 久操成人在线视频| 亚洲三级电影在线观看| 97视频在线观看免费| 亚洲黄色小说网| 久久性天堂网| 亚洲欧美日韩精品久久久| 一级毛片电影| 亚洲国产精品久久艾草纯爱| 亚洲黄色小说在线观看| 神马电影网我不卡| 久久精品国产精品亚洲| 国产成人免费看一级大黄| 亚洲一区久久| 无码免费一区二区三区免费播放 | 在线精品小视频| 国产精品视频入口| 国产成+人+亚洲+欧美+综合| 一区二区三区美女| 免费成人深夜夜行p站| 亚洲国产天堂| 97在线精品视频| 四虎a级欧美在线观看| 粉嫩aⅴ一区二区三区四区五区| 777av视频| 婷婷色在线播放| 永久免费精品影视网站| 亚洲影院一区二区三区| 校园春色综合网| 国产四区在线观看| 亚洲搞黄视频| 日韩第一页在线| 国产精品久久久午夜夜伦鲁鲁| 免费高清在线一区| aa视频在线播放| aa级大片免费在线观看| 日韩在线免费观看视频| 朝桐光av在线一区二区三区| 国内一区二区在线| 国产成人a亚洲精v品无码| av中文字幕在线观看第一页| 在线观看欧美www| 天天操天天射天天| 成人午夜免费视频| 国产精品一区二区小说| 男人天堂久久| 国产精品激情av电影在线观看 | 精品免费视频一卡2卡三卡4卡不卡| 性久久久久久久久久久久| 在线免费观看av网址|