2014-12-07 90 views
0

我無法確定哪些指令將被鏈接器修改,哪些不會。我的教科書說,那些將被修改的是那些其值被定義爲程序起始地址+ - 常數的那些。它提供了以下2點MIPS的例子:鏈接器實際修改了什麼?

  1. Ĵ有#在源程序一些標籤
  2. SW $ 5導致#WHERE結果是計劃內的標籤

則說,這些不需要修改是那些表達式是獨立的程序的起始地址的

  1. 李$ L2,buffend緩衝#bufend和緩衝的標籤
  2. BNE $ 2,$ 0時,出口

我,因爲我認爲BNE是PC相對尋址,所以我認爲這將需要一個連接中號特別困惑。我認爲我對鏈接器的理解是缺乏的,如果有人能夠幫助我獲得一些理解,我會非常感激。

感謝,

回答

0

的鏈接...鏈接...對象斑點彙集成最終的二進制。物體在可能的位置獨立。硬編碼地址很好,但是基於標籤的編譯/彙編時間不依賴於位置,或者鏈接器在鏈接時解析它們。還有其他標籤,如外部函數和全局變量,在彙編/編譯時也無法解析,必須由鏈接器解析。

這不僅僅是被修改的指令。根據指令集和指令,絕對地址可能會被添加,然後在.text內部作爲.rodata被解析,因此不僅可以插入指令,還可以插入地址或其他解決方案。根據工具鏈,鏈接器可能會添加說明以及數據。

由於可能使用外部標籤,因此您的文本/講師可能會說中斷向量表,因此這些標籤(地址)必須由鏈接器解析。但這只是一個更大局面的簡單例子。

相關問題