前言
本次計算機組成原理學習主要分為兩塊
- 1、計算機組成原理學習(一)
主要對計算計結構和微處理器(CPU)功能原理進行學習 - 2、計算機組成原理學習(二)
主要對CPU,操作系統,匯編、編程語言之間的運行原理進行學習
我們的世界是多元多義的,而計算機的世界永遠是枯燥的,除了0就是1,為了能夠勾畫出我們能夠理解的東西,我們定義了單位字節,但是這些又不能被大多數人認知,因為我們不能寫一篇文章,然后滿篇都是0和1吧,所以后來CPU的架構師們設計了很多機器指令,這些指令剛開始是一些十六進制的機器碼,而這些指令的集合就是CPU指令集,隨著科技的發展,這樣的設計已經不能滿足需求,為了讓更多的人能夠參與進來,頂層設計師們設計了一種最接近CPU指令集的低級語言,我們稱它為匯編語言,匯編的誕生,讓計算機有了質的發展。
??匯編語言已經能夠讓很多人編寫自己的軟件,但是這樣還不夠,因為不同的CPU生產廠家指令集不一致,出現了一個問題就是一次編寫不能重復使用,不同的CPU需要一定的修改程序的額外工作,后來就提出了高級語言,CPU廠家根據ISA(工業標準規范架構)統一協定實現并支持匯編語言集合(其中有少些匯編語言功能會有所不同),這種匯編集合就是匯編指令集。
一、CPU指令集(機器語言)和匯編語言
CPU指令集
由十六進制數字組成的一組指令。每條指令需要查大量的表格來確定每個數字表示什么意思。每個廠家的指令集都有不同。匯編語言
將一組一組的十六進制數字用助記符(Mnemonic)表示,這些助記符就是匯編語言,寫好的匯編程序可以通過匯編器(Assembler)去查表把助記符替換成數字,也就把匯編語言翻譯成了機器語言。
注意:
1、匯編語言和機器語言的指令是一一對應的,匯編語言有三條指令,機器語言也有三條指令,匯編器就是做一個簡單的替換工作
2、
二、32/64位CPU、操作系統、應用程序
- 32/64位CPU
指的是CPU的處理數據的能力(每個CPU時鐘周期內,CPU能夠處理的數據量(二進制數的位數長度))。
注意:
該能力影響CPU的運算速度和內存尋址能力。位數更大的機器的運算速度和內存尋址能力更快和更大,比如,64位機有比32位機更快的運算速度,64位機支持比32機更大的內存。
32/64位操作系統
指的是操作系統能夠操作的最大內存地址空間。32位只能支持并且操作最大4GB的內存,而64位支持128G內存。32/64位應用程序
指的是該軟件能夠操作的最大內存地址空間。32位應用程序只能操作最大4GB的內存,而64位支持128G內存。三者位數上關系
從理論上來講,三者的位數要保持一致的。實際上情況,
1、64位CPU能夠運行32位操作系統,32位系統不能運行64位CPU上。
CPU的位數與操作系統的位數間的關系 不同位數的CPU的指令集的指令長度是不同的。所以,理論上32位CPU上只能跑32位操作系統、64位CPU上只能跑64位操作系統。 但是為了實現”升級到64位硬件的同時保證之前購買的32位軟件仍然能夠運行”,所以主要廠商對CPU進行處理,使64位CPU能夠運行32位操作系統。
2、64位操作系統能夠運行32位軟件,32軟件不能運行在64位系統上。
三、程序運行原理
首先我們通過上面的學習,高級語言需要通過翻譯成機器語言才能執行,而翻譯的方式分為兩種,一種是編譯型,另一種是解釋型,因此我們基本上將高級語言分為兩大類,一種是編譯型語言,例如C,C++,Java,另一種是解釋型語言,例如Python、Ruby、MATLAB 、JavaScript。
- 編譯型
源程序全部編譯成二進制代碼的可運行程序,以后運行該程序無需再經過編譯過程。 - 解釋型
源程序解釋一句,然后執行一句,直至結束,以后每次運行都需要解釋引擎,解釋一句,執行一句。
注意:
關于Java語言到底是編譯型還是解釋型,這里不做討論。
讓我們拿一個簡單的C程序如何在操作系統中運行作為例子,再細入的學習下整個運行全過程。首先C語言程序需要經過編譯后才能運行。編譯過程如下:預處理、編譯、匯編和鏈接。
- 預處理
預處理是編譯過程的第一遍做替換工作,將頭文件,條件編譯指令和宏中的引用用真實的實現代碼替換,同時完成其他工作。 - 編譯
編譯是第二遍,它將C語言程序轉換為匯編語言程序。 - 匯編
匯編將匯編程序轉換成機器語言程序,也就是機器指令序列。 - 鏈接
是編譯的最后階段。這需要一個或多個目標文件或庫作為輸入,并結合他們產生一種單一的(通常是可執行文件)文件。在這樣做時,它解析引用外部符號,分配給最后地址的程序/函數和變量,并修改代碼和數據,以反映新的地址(一個稱為重定位的處理)
注意:
1、鏈接的作用
??編譯的最后一個階段是鏈接,鏈接的作用是將程序代碼與操作系統中自帶的動態鏈接庫和系統API進行關聯。只有關聯后程序才能運行。
如果你們想更細入的了解程序運行過程,那就要去深讀《編譯原理》。因本人知識有限,如果有錯誤,請指出,隨時溝通交流,感謝。