【CSAPP】<Chapter 3>

來源:互聯網
上載者:User

標籤:csapp   檔案的   目標   記錄   包括   編程   實現   相容   源檔案   

編譯器承擔了產生彙編代碼的大部分工作,但是閱讀和理解彙編代碼仍然是重要能力。

學習意義:(1)理解編譯器的最佳化能力,分析代碼中隱含的低效率。(2)進階語言提供的抽象層會隱藏我們想要瞭解的程式的運行時行為。e

相對於C代碼錶示的計算操作,最佳化編譯器能夠重新排列執行順序,消除不必要計算,用快速控制項目替換慢速操作,甚至將遞迴變換成迭代。

表述基於x84-64的機器語言。(32位前身是IA-32)(Intel處理器系列俗稱x86)

電腦工業已經完成了從32位到64位的過渡。32位機器只能使用4GB的隨機訪問儲存空間。

每個後繼處理器的設計都是向後相容的。

摩爾定律:晶體管數量每26個月就會翻一番。

 

使用Unix命令列編譯檔案p1.c和p2.c的代碼:

linux> gcc -Og -o p p1.c p2.c

“gcc”:GCC C編譯器(linux上預設的編譯器),可以簡單地用“cc”來啟動它。

編譯選項“-Og”:說明編譯器使用會產生符合原始C代碼整體結構的機器代碼最佳化等級。較進階別的最佳化:“-O1”,“-O2”。

“gcc”命令調用了一整套程式將原始碼——>可執行代碼:

(1)C前置處理器,插入所有#include命令指定的檔案,擴充所用#define聲明指定的宏。

(2)編譯器產生兩個源檔案的彙編代碼p1.s和p2.s。

(3)編譯器將彙編代碼——>二進位目標代碼檔案p1.o和p2.o。(包含所有指令的二進位表示,還沒有填入全域值的地址)

(4)連結器將兩個目標代碼檔案與實現庫函數的代碼合并——>可執行代碼檔案p(由“-o p”指定)

 

機器級編程中最重要的兩種系統抽象:

(1)指令集體繫結構ISA(Instruction Set Architecture)定義機器級程式的格式,行為。(處理器狀態,指令格式,每條指令對狀態的影響)

(2)虛擬位址。使得提供的記憶體模型看上去是一個很大很大的位元組數組。

機器代碼對C語言程式員隱藏的處理器狀態:

(1)程式計數器PC(%rip):給出將要執行的下一條指令在記憶體中的地址。

(2)整數寄存器檔案:包含16個命名的位置,分別儲存64位的值,(儲存地址,整數資料),選項組,儲存臨時資料。

(3)一組向量寄存器:存放多個整數/浮點數值。

彙編代碼不區分有不帶正負號的整數,不同類型指標。

 

程式記憶體包括:

(1)程式的可執行機器代碼。

(2)作業系統需要的一些資訊,用來管理程序呼叫和返回的運行時棧。

(3)使用者指派的記憶體塊(如malloc庫函數分配的)。

x86-64的虛擬位址是由64位,目前地址的高16位必須設定為0。所以實際位址範圍為(0 ~ 64TB)。

 

“-S”選項讓GCC運行編譯器,只產生彙編檔案,不做進一步的工作:

linux> gcc -Og -S mstore.c

 

【CSAPP】<Chapter 3>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.