深入理解計算機系統 (程式結構與執行部分要點)
1.編譯過程: (1)c預處理器拓展源**,插入所有用#include命令指令的檔案,並拓展所有用#define 聲 明指定的巨集
(2) 編譯器產生原始檔的彙編**(此時.c檔案變為.s檔案
(3) 彙編器將彙編**轉換成二進位制**(.o)但此時沒有填入全域性址的 位址
(4)聯結器將目標**檔案與實現庫函式合併產生最終可執行**(op)
機器**將記憶體看為很大的用,按位元組定址的陣列
2.程式記憶體: (1)程式的可執行機器**(2)作業系統需要的一些資訊(3)用來管理過程的呼叫返回執行的棧,以及使用者分配的記憶體
3.程式記憶體用虛擬位址定址,在任何時刻只有一部風的位址合法 在目前的x86架構這些
記憶體位址的高16位必須設定為0,所以某一單元的位址實際上是2的48次方和64t程式會訪問幾兆位元組或幾仟兆位元組,作業系統負責管理虛擬位址空間,將虛擬位址翻譯為實際處理器記憶體中的位址。
4.x86的指令從1到15位元組不等,常用的指令位元組少
5.設計指令的方法是從某一給定的位置開始,可以將位元組唯一的解碼成機器指令。
6.資料格式
7.8086有8個16為暫存器 x86 架構有16個64位暫存器,除了繼承8086的8個外,還拓展了%r8 到%r15 %al ->%ax->%eax->%rax
9.運算元有三種型別 :
1.立即數 : 用來表示數值 在att格式的彙編**(即linux或unix中使用的彙編
**)立即數的書寫方式是『$』後加乙個標準c表示法表示的真數 例如
$-577或$0x1f
2.暫存器型別: 他表示某個暫存器的內容 用r表示任意暫存器,用引用r[r] 表示其中的值
3.記憶體引用: 根據計算出來的位址訪問某個記憶體位置
10資料傳送指令:
1.mov 類 movb movw movl movq movabsq 分別傳送位元組,字,雙字,四字,絕對的四字 movb a ,b 表示由a傳到b中.第乙個是源運算元,第二個是目的運算元
需要注意:(1)x源運算元指定的是乙個值,儲存在暫存器或者是記憶體中。目的運算元指定的是乙個位置,要麼是乙個暫存器,要麼是乙個記憶體位址。
(2)x86有一條限制,傳送指令的兩個運算元不能都指向記憶體位置。即從乙個記憶體位置複製到另乙個記憶體位置需要通過暫存器作為中介
(3) 大多數情況中,mov指令只會更新指定的那些暫存器位元組或者是記憶體位址中的內容但是對於movl會吧高四位位元組設定為0
以上的指令從較小的源複製到較大的源。其中movz會將剩餘的位元組填充為0,而movs會將使用符號進行填充
例題:
《深入理解計算機系統 程式結構》讀書筆記
計算機系統是由硬體和系統軟體組成的,他們共同工作來執行應用程式。在 深入理解計算機系統 一書中將會學到很多實踐的技巧。例如 了解編譯器是如何實現過程呼叫的 避免緩衝區溢位錯誤帶來的安全漏洞 理解併發帶來的希望和陷阱等。翻譯過程分為4個階段 了解編譯系統如何工作是大有益處的 執行程式 快取記憶體儲存器...
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...
《深入理解計算機系統》
知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...