PIC淺談--《x86/x64體系探索及程式設計》試讀

broadviewbj發表於2012-12-03

    看到《x86/x64體系探索及程式設計》這本書的介紹裡提到“基本上就可以寫出自己簡易的OS核心”,突然想起自己大學時候學的是硬體,曾經也嘗試著去用c來寫一個簡單的OS系統。當然,說是系統也算不上,只是當時很流行研究多工搶佔,就學著做一個簡單的多工搶佔的OS。現在想來卻也不記得當時具體是怎麼做的和做成什麼樣的了。

    重點看了看試讀章節第二章的部分,恰好也看到了“PIC”這樣一個話題。我在學習的時候也查過,但是關於這部分的資料不太多。網上搜到的PIC相關內容大多是指“PeripheralInterfaceController”,但是在OS程式設計基礎中的PIC指的是PositionIndependentCode,中文叫“位置無關編碼”,試讀章節裡也用一個getstdhadle()的例子來簡單介紹了一下什麼是位置無關編碼,因為這也算是X86基礎知識吧,並沒有太深入的介紹,那我也在這裡用最簡單易懂的方式介紹下我對“位置無關編碼”的理解。

    所謂的位置無關編碼。是一種庫檔案的編碼組織方式,其特點是方便系統裝載。我們瞭解這個可以從頭說開,像試讀章節的例子中一樣,最早的時候我們都是用“絕對地址”來連結定位一段程式碼,這樣就會出現一個問題,這個地址是這些程式碼的起始地址,程式碼必須放在這個絕對的位置上才能正常執行,否則當程式碼去訪問、執行某個變數名、函式名對應地址上的程式碼時就會找不到,程式也就跑掛了。這樣用絕對地址去定位的編碼方式我們叫“位置相關編碼”。

    有“相關”就有“無關”,有“絕對”就肯定有“相對”。位置無關編碼裡的定位跳轉指令不是一段絕對跳轉指令,而是一段相對跳轉指令,訪問的是一個相對跳轉地址,因此,包括這個語句和main在內的程式碼段無論是否放在它的執行域這段程式碼都能正常執行。這就是所謂的位置無關程式碼。現在我們的編碼方式也已經更多的使用位置無關編碼。

 

本文摘自ITEYEITeye11月技術圖書有獎試讀活動,原文連結如下:

http://jacksonren1987.iteye.com/blog/1717194

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-750464/,如需轉載,請註明出處,否則將追究法律責任。

相關文章