Re: [問題] Relocatable code

看板CSIE_ASM作者 (pj2)時間18年前 (2007/10/23 14:35), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《gglk (錦州挖挖)》之銘言: : ※ 引述《gglk (錦州挖挖)》之銘言: : : 老師,不好意思,可以麻煩再解釋一次 : : PC-relative的好處(relocatable code)嗎? : : A檔案說 : : we can move the code from one block of memory to another without changing : : the target addresses : : 並不是很懂(move 什麼 code?? code 不是一直那裡給你讀嗎?), : : PC-relative 跟 Absolute address 不是只有「計算下一個指令在哪」的方式不同而已? : : 算完以後還是都把PC移過去了不是嘛? : : 謝謝您。 : 恩,老師很忙,那我把今天老師回答的打在下面,如果理解的不對, : 麻煩老師指出來謝謝。 : 假如現在PC指到Instructuin A : 要從Instructuin A 跳到Instructuin B有兩種跳法, : 1.一種是告訴它B的絕對位址(Absolute address), : 2.一種是告訴他B離現在的PC多遠(PC relative), : 差別就在於當整個程式碼的位置有調動 : (即A檔案所謂:move the code from one block of memory to another)時, : 若當初採的是第一種方法,我必須重新計算B的絕對位址, : 若是第二種,B離A多遠並不會因為整個程式碼位置改了而有變動, : 不用重算。 : 所以A檔案說 without changing the target addresses : 這就是relocatable code。 : 不過還是有一些地方我想再確認: : 1.所以說,B離A多遠這個資訊,他是在程式執行時會被保存起來囉? 在 assembler 組譯時即可算出, 此距離編碼後以 binary 型式保存, 程式執行時 會 decode, 參考當時 PC 的值, 即可得知要跳到哪裡執行 : 2.所謂 整個程式碼位置改變 是指「程式在跑的時候」,程式碼不會固定放在那裏給你讀, : 而是有可能位置變來變去這樣嗎? 還是說「每次打開這個程式的時候」它的被放的 : 位置都不同這樣? : 應該不會是後者因為執行完應該早就沒有B離A多遠的資訊了吧?可是又覺得執行時整個 : CODE會移來移去很怪... 在提供 virtual memory 的作業系統中, 一般載入的位址相同, 但不表示 loader 一定要將程式載入到相同的記憶體位址 : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.31.16
文章代碼(AID): #177POxWa (CSIE_ASM)
討論串 (同標題文章)
文章代碼(AID): #177POxWa (CSIE_ASM)