編譯位址 執行位址 相對位址

2021-06-05 09:58:59 字數 1251 閱讀 4094

1、什麼是編譯位址?什麼是執行位址? 

32 位的處理器,它的每一條指令是4 個位元組,以4 個位元組儲存順序,進行順序執行,cpu 是順序執行的,只要沒發生什麼跳轉,它會順序進行執行,編譯器會對每一條指令分配乙個 編譯位址,這是編譯器分配的,在編譯過程中分配的位址,我們稱之為編譯位址。 

執行位址是指,程式指令真正執行的位址,是由使用者指定的,使用者將執行位址燒錄到**, **就是執行的位址。比如有乙個指令的編譯位址是0x5,實際執行的位址是0x200,如果 使用者將指令燒到0x200 上,那麼這條指令的執行位址就是0x200,當編譯位址和執行位址不 同的時候會出現什麼結果?結果是不能跳轉,編譯後會產生跳轉位址,如果實際位址和編譯 後產生的位址不相等,那麼就不能跳轉。c 語言編譯位址都希望把編譯位址和實際執行位址 放在一起的,但是彙編**因為不需要做c 語言到彙編的轉換,可以人為的去寫位址,所以 直接寫的就是他的執行位址,這就是為什麼任何bootloader 剛開始會有一段彙編**,因為 起始**編譯位址和實際位址不相等,這段**和彙編無關,跳轉用的執行位址。編譯位址 和執行位址如何來算呢?假如有兩個編譯位址a=0x10,b=0x7,b 的執行位址是0x300,那 麼a 的執行位址就是b 的執行位址加上兩者編譯位址的差值,a-b=0x10-0x7=0x3,a 的執行 位址就是0x300+0x3=0x303。 假設uboot 上兩條指令的編譯位址為a=0x33000007 和b=0x33000001,這兩條指令都落在 bank6 上,現在要計算出他們對應的執行位址,要找出執行位址的始位址,這個是由使用者燒錄進去的,假設執行位址的首位址是0x0,則a 的執行位址 為0x7,b 為0x1,就是這樣算出來的。 

2、什麼是相對位址? 

以nor flash 為例,nor falsh 是對映到bank0 上面,sdram 是對映到bank6 上面,uboot 和核心最終是在sdram 上面執行,最開始我們是從nor flash 的零位址開始往後燒錄,uboot 中至少有一段**編譯位址和執行位址是不一樣的,編譯uboot 或核心時,都會將編譯位址 放入到sdram  中,他們最終都會在sdram  中執行,剛開始uboot 在nor flash 中執行,運 行位址是乙個低端位址,是bank0 中的乙個位址,但編譯位址是bank6 中的位址,這樣就會 導致絕對跳轉指令執行的失敗,所以就引出了相對位址的概念。那麼什麼是相對位址呢?至 少在bank0 中uboot 這段**要知道不能用b+編譯位址這樣的方法去跳轉指令,因為這段 **的編譯位址和執行位址不一樣,那如何去做呢?要去計算這個指令執行的真實位址,計 算出來後再做跳轉,應該是b+執行位址,不能出現b+編譯位址,而是b+執行位址,而執行 位址是算出來的。 

相對位址轉絕對位址

發乙個相對位址轉絕對位址的函式 今天在研究jquery ajax功能的時候遇到乙個問題,通過 load url a load乙個網頁的鏈結後獲取到的位址資訊是相對於當前執行ajax程式的網頁的絕對位址。比如我在 c x a.html 網頁執行 www.romotc.com 網頁中有乙個鏈結 a bo...

URI URL URN,相對位址 絕對位址

uri uniform resource identifier 標準資源標示符,可以進一步分為定位器 名稱,或者二者兼具 通過一定規則解碼可以得到資源位置 在html中的href採用的是uri引用 uri引用分為絕對引用和相對引用 絕對引用以方案名和冒號開頭,其他為相對引用 url uniform ...

相對位址和絕對位址

什麼是相對位址 document.location.href 就是相對位址跳轉,這個方法實現的是在當前路徑的基礎上進行跳轉 什麼是絕對位址 網路位址顧名思義就是直接跳轉到網路的位址,以http或者https等開頭的位址,這種位址可以直接跳轉到頁面 本地位址如果沒有特別說明在哪乙個盤,那麼所有的跳轉都...