深入理解計算機系統 第三章 程式的機器級表示 part1
如題所示,這一章講解了程式在機器中是怎樣表示的,主要講組合語言與機器語言。
學習什麼,為什麼學,以及學了之後有什麼用
我們不用學習如何建立機器級的程式碼,但是我們要能夠閱讀和理解機器級的程式碼。
雖然現代的優化編譯器能夠很有效的將高階程式碼翻譯成機器級的程式碼,但是,為了能夠達到以下 2 點目的,我們還是要能夠閱讀和理解機器級的程式碼:
1、通過檢視程式對應的彙編程式碼,可以瞭解程式的執行效率,然後可以採取相應措施提高其效率
2、系統程式中的漏洞會被人利用,導致安全問題。瞭解這些漏洞是如何出現的,以及如何防禦他們,需要了解程式機器級表示的知識。
高階語言是如何被處理成機器語言的
可以參考本書第一章的“圖1-3”(第 9 頁),此圖及相關文字描述,詳細地表述了高階語言程式碼是如何一步步被編譯系統翻譯成機器語言程式碼的。
簡化一點,就是:
高階語言程式碼 被編譯器處理成 組合語言程式碼
組合語言程式碼 被彙編器處理成 機器語言程式碼
組合語言與機器語言的異同
彙編程式碼的表示非常接近於機器語言程式碼。與機器程式碼的二進位制相比,彙編程式碼的主要特點是它用可讀性更好的文字格式表示。
相關推薦
深入理解計算機系統 第三章 程式的機器級表示 part1
如題所示,這一章講解了程式在機器中是怎樣表示的,主要講組合語言與機器語言。 學習什麼,為什麼學,以及學了之後有什麼用 我們不用學習如何建立機器級的程式碼,但是我們要能夠閱讀和理解機器級的程式碼。 雖然現代的優化編譯器能夠很有效的將高階程式碼翻譯成機器級的程式碼,但是,為了
深入理解計算機系統 第三章 程式的機器級表示 part2
這周由於時間和精力有限,只讀一小節:3.4.4 壓入和彈出棧資料 棧是一種特殊的資料結構,遵循“後進先出”的原則,可以用陣列實現,總是從陣列的一端插入和刪除元素,這一端被稱為棧頂。 棧有兩個常用指令: push:把資料壓入棧中 pop:刪除資
深入理解計算機系統 第三章 程式的機器級表示 part3
這周看了劉老師提供的相關視訊,以及書中對應的章節“3.7 過程” 這一節分為執行時棧、轉移控制、資料傳送、棧上的區域性儲存、暫存器中的區域性儲存空間和遞迴過程這 6 個小節 其中前 3 小節看懂了一部分內容,後面兩個還沒來得及看,下週看完補上
深入理解計算機系統 ——第三章 程式的機器級表示
### 這一章主要是介紹高階語言,例如C語言編寫的程式,經過編譯後轉換為彙編程式。以往在程式設計師對機器進行操作主要都是使用匯編語言。筆者在大學做微控制器開發的時候,老師制訂的實驗,明確要求使用匯編語言。 組合語言的使用和掌握能夠很好地幫助程式設
深入理解計算機系統 第三章大略和第五章大略
$0 一個 編譯 存儲器 系統 32位 做了 ++i 擴展 這2章總結的很少,主要是覺得沒那麽重要。 1.2個操作數的指令,第二個操作數通常是目的操作數:movb a b,move a to b,而add a b,b+=a,指令分為指令類,如mov類:movb,movw,m
<深入理解計算機系統(第三版)》第一章
第一章 計算機系統漫遊 計算機系統是由硬體和系統軟體組成的,它們共同工作來執行應用程式. 1.1 資訊就是位+上下文 源程式實際上就是由一個值0和1組成的位(bit)序列,8個位被組織成一組,稱為位元組.每個位元組表示程式中某個文字字元. 大部分現代系統都是有ASCII標準表示文字字元,只由ASCII字
深入理解計算機系統----第五章優化程式效能
轉載地址https://www.jianshu.com/p/4586dc676807 編寫執行的快的程式有三個因素:①選擇合適的演算法和資料結構;②理解編譯器的能力,使用有效的方式讓編譯器能進行優化;③對於運算量特別大的程式,可能還需要進行任務分解。在這一過程中可能還需要對程式的可讀性和執
《深入理解計算機系統第三版》第三章家庭作業參考答案
簡述 最近看docker和k8s的底層實現原理,嚴重感覺自己對底層的知識瞭解不足,於是開始業餘時間深入看一些底層書籍,就找了本據說是理解整個計算機體系的入門書-《深入理解計算機系統》.直接買的最新的第三版,從第三章開始看的,第二章接下來有心情再看(看了幾眼全是
[第五章] 深入理解計算機系統第三版 家庭作業參考答案
5.13 A. 畫圖: 關鍵路徑為第三幅圖加粗部分 B. 下界為浮點加法的延遲界限,CPE 為 3.00 C. 整數加法的延遲界限,CPE 為 1.00 D. 關鍵路徑上只有浮點加法 5.14 v
[第八章] 深入理解計算機系統第三版 家庭作業參考答案
8.9 程序對 併發麼? AB × AC √ AD √ BC √ BD √ CD √ 8.10 A. fork B. longjmp execve C. setjmp 8.11 4次,畫畫程序圖就行了 8.12 8次
深入理解計算機系統第三版家庭作業答案-第二章
2.55-2.57答案:show_bytes 原始碼:#include<stdio.h> typedef unsigned char* byte_pointer; void show_bytes(byte_pointer ch, int len){ prin
[第三章] 深入理解計算機系統第三版 家庭作業參考答案
人非聖賢孰能無過,歡迎大家提問與糾錯 3.58 long decode2(long x, long y, long z) { y -= z; x *= y; return ((y << 63) >> 63) ^ x; } 3.5
深入理解計算機系統 第三版 第三章 家庭作業 答案
3.58long decode2(long x,long y,long z) { int ret; y=y-z; x=x*y; ret=y; ret<<=63; ret>>=63; return ret^x; }算術左移63再右移6
[第六章] 深入理解計算機系統第三版 家庭作業參考答案
6.22 磁軌數 d 與 r - x * r 成正比 設 d = k(r - x * r) = kr(1 - x) 總容量 c = 2πxk(r^2)(1 - x) = 2πk(r^2)(x - x^2) 上式實際上是關於 x 的二次式,其對稱軸為 1/2,即當
深入理解計算機系統 第六章 儲存器層次結構
為什麼要學習儲存器的層次結構? 如果我們理解了系統是如何將資料在儲存器層次結構中上上下下移動的,那麼我們就可以編寫自己的應用程式,使得它們的資料項儲存在層次結構較高的地方,在那裡 CPU 能更快地訪問到它們。 區域性性原理 計算機程式傾向於引用臨近於其他最近引用過的資料項
深入理解計算機系統——第六章
有一個 圖片 組成 技術分享 data- 計算機 系統 大量 src 存儲器 磁盤 磁盤可以存儲大量的數據,但是速度慢 磁盤由盤片組成,每個盤片有兩面,上面覆蓋著磁性記錄材料,盤片中央有一個可以旋轉的主軸 深入理解計算機系統——第六章
深入理解計算機系統--第七章課後作業
對於問題一,輸出結果如下圖所示: 兩個都是弱定義值,所以連結器隨機選擇一個,而這時在c2.c中,g的值為37(強定義),故c1.c的g為37,呼叫函式f,g變為38 當執行第二條語句時,結果如圖: 多次定義變數g,程式在連結的時候報錯!!! 對
深入理解計算機系統----第九章虛擬記憶體
原文連結 https://www.jianshu.com/p/e1b82b230917 虛擬儲存器又叫做虛擬記憶體,我們現在的作業系統普遍都支援了虛擬記憶體,這樣做是因為我們同時執行著太多的程式了,就目前我電腦的狀態來看,我既要開啟瀏覽器,又要聽歌,可能同時還登陸的有QQ,如果不使用虛擬記
深入理解計算機系統----第八章異常控制流
原文連結 https://www.jianshu.com/p/c8a6c4154219 目 錄 每次從一條指令過渡到另外一條指令的過程稱為控制轉移,這樣的一個控制轉移序列叫做控制流,如果每條指令都是相鄰的,這樣的過渡就是平滑序列。如果一條指令與另外一條指令不相鄰,這樣突發性
深入理解計算機系統----第七章連結
原文連結 https://www.jianshu.com/p/7f27c0316355 目 錄 連結是將各種不同檔案的程式碼和資料部分收集(符號解析和重定位)起來並組合成一個單一檔案的過程。本章節我們將要學習連結器工作的詳細原理。通過對這一方面知識的學習,將有助於理解一些危