指令系統
指令系統是計算機硬件的語言系統,也叫機器語言,指機器所具有的全部指令的集合,它是軟件和硬件的主要界面,反映了計算機所擁有的基本功能。從系統結構的角度看,它是系統程序員看到的計算機的主要屬性。因此指令系統表征了計算機的基本功能決定了機器所要求的能力,也決定了指令的格式和機器的結構。
按功能划分:
1、數據處理指令:包括算術運算指令、邏輯運算指令、移位指令、比較指令等。
2、數據傳送指令:包括寄存器之間、寄存器與主存儲器之間的傳送指令等。
3、程序控制指令:包括條件轉移指令、無條件轉移指令、轉子程序指令等。
4、輸入輸出指令:包括各種外圍設備的讀、寫指令等。有的計算機將輸入輸出指令包含在數據傳送指令類中。
5、狀態管理指令:包括諸如實現置存儲保護、中斷處理等功能的管理指令。
關於代碼,需要知道的幾個概念
高級語言代碼 High-Level Code
高級語言代碼,自然是指由高級編程語言編寫代碼,對計算機的細節有更高層次的抽象。
相對於低級編程語言(low-level programming language)更接近自然語言(人類的語言)。
集成一系列的自動工具(垃圾回收,內存管理等),會讓程序員延長壽命,更快樂的編寫出更簡潔,更易讀的程序代碼。
低級語言代碼 Low-Level Code
低級語言代碼,指由低級編程語言編寫的代碼,相對高級語言,少了更多的抽象概念,更加接近於匯編或者機器指令。
但是這也意味着代碼的可移植性很差。
在我看來,高與低,只是一組相對詞而已。
越高級的語言,性能、自由度越不及低級語言。
但是在抽象、可讀可寫性、可移植性越比低級語言優秀。
在以前的年代,C/C++語言相對匯編語言,機器指令來說,肯定是高級語言。
而到了今天,我們更多人對C語言偏向認知為「低級語言」。
匯編語言 Assembly Language
匯編語言作為一門低級語言,對應於計算機或者其他可編程的硬件。
它和計算機的體系結構以及機器指令是強關聯的。
換句話說,就是不同的匯編語言代碼對應特定的硬件,所以不用談可移植性了。
相對於需要編譯和解釋的高級語言代碼來說,匯編代碼只需要翻譯成機器碼就可以執行了。
所以匯編語言也往往被稱作象征性機器碼(symbolic machine code)
字節碼 Byte Code
字節碼嚴格來說不算是編程語言,而是高級編程語言為了種種需求(可移植性、可傳輸性、預編譯等)而產生的中間碼(Intermediate Code)。
它是由一堆指令集組成的代碼,例如在javac編譯過后的java源碼產生的就是字節碼。
源碼在編譯的過程中,是需要進行「詞法分析 → 語法分析 → 生成目標代碼」等過程的,在預編譯的過程中,就完成這部分工作,生成字節碼。
然后在后面交由解釋器(這里通常指編程語言的虛擬機)解釋執行,省去前面預編譯的開銷。
是一種包含執行程序、由一序列 op 代碼/數據對 組成的二進制文件。
字節碼是一種中間碼,它比機器碼更抽象,需要直譯器轉譯后才能成為機器碼的中間代碼。
總結:字節碼是一種中間狀態(中間碼)的二進制代碼(文件)。需要直譯器轉譯后才能成為機器碼。
機器碼 Machine Code
機器碼是一組可以直接被CPU執行的指令集,
每一條指令都代表一個特定的任務,或者是加載,或者是跳轉,亦或是計算操作等等。
所有可以直接被CPU執行的程序,都是由這么一系列的指令組成的。
機器碼可是看作是編譯過程中,最低級的代碼,因外再往下就是交由硬件來執行了。
當然機器碼也是可以被編輯的,但是以人類難以看懂的姿勢存在,可讀性非常差。