91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

微軟公司宣布不再支持你正在使用的 IE瀏覽器,這會嚴重影響瀏覽網頁,請使用微軟最新的Edge瀏覽器
廠商專區
產品/技術
應用分類

ARM當中一種位置無關代碼的分析

2016-06-22 09:27 來源:電源網綜合 編輯:鈴鐺

PIC是一種在ARM當中的位置無關碼。位置無關碼的意義,是代碼放在存儲器的無論哪個位置中都能使得程序正常執行,位置無關代碼的相對地址沒有變化,就不會影響程序的運行。在ARM中,PIC就是這樣一種位置無關代碼。本文就將針對PIC進行分析,幫助剛入門的朋友進行深入了解。

PIC的特點

它被加載到任意地址空間都可以正確的執行。其原理是PIC對常量和函數入口地址的操作都是基于PC+偏移量的尋址方式。即使程序被移動,但是PC也變化了,而偏移量是不變的,所以程序仍然可以找到正確的入口地址或者常量。

加載域:是代碼存放的地址。

運行域:是代碼運行時的地址。

鏈接地址:運行時,程序應該位于的地址。

在一些場合,一些代碼并不在儲存這部分代碼的地址上執行,比如說,放在norflash中的代碼可能最終是放在RAM中運行,那么在norflash中的地址就是加載域,而在RAM中的地址就是運行域。

在匯編代碼中開發者常常會看到一些跳轉指令,比如說b、bl(是位置無關的指令)等這些指令后面是一個相對地址而不是絕對地址,比如說bmain,這個指令應該怎么理解?main這里究竟是一個什么東西?

這時候就需要涉及到鏈接地址的概念了,鏈接地址實際上就是鏈接器對代碼中的變量名、函數名等東西進行一個地址的編排,賦予這些抽象的東西一個地址,然后在程序中訪問這些變量名、函數名就是在訪問一些地址。一般所說的鏈接地址都是指鏈接這些代碼的起始地址,代碼必須放在這個地址開始的地方才可以正常運行,否則的話當代碼去訪問、執行某個變量名、函數名對應地址上的代碼時就會找不到,接著程序無疑就是跑飛。

但是上面說的那個bmain的情形有點特殊,b、bl等跳轉指令并不是一個絕對跳轉指令,而是一個相對跳轉指令,什么意思呢?就是說,這個main標簽最后得到的只并不是main被鏈接器編排后的絕對地址,而是main的絕對地址減去當前的這個指令的絕對地址所得到的值,也就是說b、bl訪問到的是一個相對地址,不是絕對地址,因此,包括這個語句和main在內的代碼段無論是否放在它的運行域它都能正常運行。這就是所謂的位置無關代碼。

所以在一些需要通過ARM來實現位置相關代碼的設計,并不建議使用位置無關代碼來進行書寫。在代碼中如果需要實現位置相光,那么開發者就不能夠只用絕對尋址指令,反之就是和位置相關的代碼有關了。希望大家在閱讀過本文之后能夠有所收獲。

聲明:本內容為作者獨立觀點,不代表電源網。本網站原創內容,如需轉載,請注明出處;本網站轉載的內容(文章、圖片、視頻)等資料版權歸原作者所有。如我們采用了您不宜公開的文章或圖片,未能及時和您確認,避免給雙方造成不必要的經濟損失,請電郵聯系我們,以便迅速采取適當處理措施;歡迎投稿,郵箱∶editor@netbroad.com。

相關閱讀

微信關注
技術專題 更多>>
技術專題之EMC
技術專題之PCB

頭條推薦

電子行業原創技術內容推薦
客服熱線
服務時間:周一至周五9:00-18:00
微信關注
獲取一手干貨分享
免費技術研討會
editor@netbroad.com
400-003-2006
主站蜘蛛池模板: 苗栗市| 库尔勒市| 剑川县| 浦县| 嘉峪关市| 龙岩市| 陆川县| 麻城市| 廉江市| 兴隆县| 江陵县| 千阳县| 阳城县| 留坝县| 溆浦县| 新邵县| 广东省| 沙田区| 尤溪县| 务川| 伊宁县| 张掖市| 南皮县| 化州市| 京山县| 莱芜市| 永和县| 山西省| 天峻县| 临潭县| 策勒县| 遵义县| 临湘市| 婺源县| 邢台市| 旌德县| 涞源县| 家居| 潢川县| 鄂州市| 金华市|