ARM的位置無關(guān)程序設(shè)計_第1頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、arm的位置無關(guān)程序設(shè)計處理器支持位置無關(guān)的程序設(shè)計,這種程序加載到存儲器的隨意地址空間都可以正常運(yùn)行,其設(shè)計辦法在應(yīng)用系統(tǒng)開發(fā)中具有重要的作用。尤其在裸機(jī)狀態(tài)下開發(fā)bootloader程序及舉行內(nèi)核初始化設(shè)計;利用位置無關(guān)的程序設(shè)計辦法還可以在詳細(xì)應(yīng)用中用于構(gòu)建高效率動態(tài)鏈接庫,因而了解位置無關(guān)的程序設(shè)計辦法,有助于開發(fā)人員設(shè)計出結(jié)構(gòu)容易、清楚的應(yīng)用程序。應(yīng)用程序必需經(jīng)過編譯、匯編和鏈接后才變成可執(zhí)行文件,在鏈接時,要對全部目標(biāo)文件舉行重定位(relocation),建立符號引用規(guī)章,同時為變量、函數(shù)等分配運(yùn)行地址。當(dāng)程序執(zhí)行時,系統(tǒng)必需把代碼加載到鏈接時所指定的地址空間,以保證程序在執(zhí)行過

2、程中對變量、函數(shù)等符號的正確引用,使程序正常運(yùn)行。在具有操作系統(tǒng)的系統(tǒng)中,重定位過程由操作系統(tǒng)自動完成。在設(shè)計bootloader程序時,必需在裸機(jī)環(huán)境中舉行,這時bootloader映像文件的運(yùn)行地址必需由程序員設(shè)定。通常狀況下,將bootloader程序下載到rom的0x0地址舉行啟動,而在大多數(shù)應(yīng)用系統(tǒng)中,為了迅速啟動,首先將bootloader程序拷貝到sdram中再運(yùn)行。普通狀況下,這兩者的地址并不相同,程序在sdram中的地址重定位過程必需由程序員完成。事實上,因為bootloader是系統(tǒng)上電后要執(zhí)行的第一段程序,bootloader程序的拷貝和在這之前的全部工作都必需由其自身來

3、完成,而這些命令都是在rom中執(zhí)行的。也就是說,這些代碼即使不在鏈接時所指定的運(yùn)行時地址空間,也可以正確執(zhí)行。這就是位置無關(guān)代碼,它是一段加載到隨意地址空間都能正常執(zhí)行的特別代碼。位置無關(guān)代碼常用于以下場合:程序在運(yùn)行期間動態(tài)加載到內(nèi)存;程序在不同場合與不同程序組合后加載到內(nèi)存(如分享的動態(tài)鏈接庫);在運(yùn)行期間不同地址互相之間的映射(如bootloader程序)。雖然在用gcc編譯時,用法-f選項可為產(chǎn)生位置無關(guān)代碼,但這并不能修正程序設(shè)計中固有的位置相關(guān)性缺陷。特殊是匯編語言代碼,必需由程序員遵循一定的程序設(shè)計準(zhǔn)則,才干保證程序的位置無關(guān)性。arm程序的位置無關(guān)可執(zhí)行文件pie(positi

4、onindependent executable)包括位置無關(guān)代碼pic和位置無關(guān)數(shù)據(jù)pid(positionindependent data)兩部分。pid主要針對可讀寫數(shù)據(jù)段(.data段),其中保存已賦初值的全局變量。為實現(xiàn)其位置無關(guān)性,通常用法寄存器r9作為靜態(tài)基址寄存器,使其指向該可讀寫段的首地址,并用法相對于基址寄存器的偏移量來對該段的變量舉行尋址。這種辦法常用于為可重入程序的多個實例產(chǎn)生多個自立的數(shù)據(jù)段。在程序設(shè)計中,普通不必考慮可讀寫段的位置無關(guān)性,這主要是由于可讀寫數(shù)據(jù)主要分配在sdram中。pic包括程序中的代碼和只讀數(shù)據(jù)(.text段),為保證程序能在rom和sdram空

5、間都能正確運(yùn)行(如裸機(jī)狀態(tài)下的bootloader程序),必需采納位置無關(guān)代碼程序設(shè)計。pic遵循只讀段位置無關(guān)ropi(readonly position independence)的atpcs(armthumb procedure call standard)的程序設(shè)計規(guī)范:(1) 程序設(shè)計規(guī)范1引用同一ropi段或相對位置固定的另一ropi段中的符號時,必需是基于pc的符號引用,即用法相對于當(dāng)前pc的偏移量來實現(xiàn)跳轉(zhuǎn)或舉行常量拜訪。 位置無關(guān)的程序跳轉(zhuǎn)。在arm匯編程序中,用法相對跳轉(zhuǎn)命令b/bl實現(xiàn)程序跳轉(zhuǎn)。命令中所跳轉(zhuǎn)的目標(biāo)地址用基于當(dāng)前pc的偏移量來表示,與鏈接時分配給地址標(biāo)號的肯定地址值無關(guān),因而代碼可以在任何位置舉行跳轉(zhuǎn),實現(xiàn)位置無關(guān)性。另外,還可用法adr或adrl偽命令將地址標(biāo)號值讀取到pc中實現(xiàn)程序跳轉(zhuǎn)。這是由于adr或adrl等偽命令會被編譯器替換為對基于pc的地址值舉行操作,但這種方式所能讀取的地址范圍較小,并且會因地址值是否為字對齊而異。但在arm程序中,用法ldr等命令挺直將地址標(biāo)號值讀

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論