鏈結位址和執行位址

2021-08-21 20:58:20 字數 554 閱讀 8742

位置無關**和位置有關**:位置無關**要好一些,適應強,放在**都可以執行;位置有關**就必須。

三星推薦的啟動方式:bootloader必須大於16kb並小於96kb,假定bootloader為80kb,啟動過程是這個樣子:先開機上電後bl0執行,bl0會載入外部啟動裝置中的bootloader的前16kb(bl1)到sram中去執行,bl1執行時會載入bl2(bootloader中80-16=64kb)到sram中(從sram的16kb處開始用)去執行;bl2執行時會初始化ddr並且將os搬運到ddr去執行os,啟動完成。

uboot實際使用方式:uboot大小隨意,假定為200kb。啟動過程:先開機上電後bl0執行,bl0載入外部啟動裝置中的uboot的前16kb(bl1)到sram中去執行,bl1執行時會初始化ddr,然後整個uboot搬運到ddr中,然後一句長跳轉(從sram跳轉到ddr)指令從sram中直接跳轉到ddr中繼續執行uboot直到uboot完全啟動,uboot啟動後在uboot命令中去啟動os。

為什麼需要重定位:

鏈結位址和執行位址有時候必須不同,而且還不能全部使用位置無關碼,這時候只能重定位。

鏈結位址與執行位址

32位的處理器,它的每一條指令是4個位元組順序儲存,cpu是順序執行的,只要沒發生什麼跳轉,它會順序進行執行這些指令,編譯器對 中的變數名 函式名等東西進行乙個位址的編排,賦予這些抽象的東西乙個位址,然後在程式中訪問這些變數名 函式名就是在訪問一些位址,這些位址我們稱之為編譯位址。是指程式指令真正執...

鏈結位址和儲存位址

什麼是儲存位址呢?我們知道,我們編寫的c 會被編譯成彙編指令,進一步變成機器碼,最後載入到arm的記憶體中。也就是說我們的彙編指令被儲存在記憶體之中,而指令對應的位址,就是他的 儲存位址 其實 儲存位址 的值,一直由pc這個暫存器所記載著。想改變 儲存位址 的值直接改變pc好了 再說鏈結位址,他是指...

關於鏈結位址

回過頭來看我們的helloworld程式,在makefile中 ttext 0x7c00,鏈結位址為0x7c00,code標號的偏移位址為0x15,則鏈結後其位址為0x7c15,其他函式呼叫此函式時,也就會呼叫位址0x7c15,這時jmpl 0,code語句反彙編後為 假如我們在makefile中改...