軟考筆記(9)--計算機組成原理2--指令系統

前言

CPU就是一個執行各種計算機指令的邏輯機器,計算機指令也叫做機器語言。不同CPU支持的語言可能不同,比如Inter的CPU和蘋果手機ARM的CPU就支持不同的指令,每個CPU能支持的指令組合在一起就是計算機指令集。

指令是計算機執行操作的命令,計算機的所有指令集合構成計算機的指令系統,指令系統位於硬件和軟件的交界面上,決定了計算機的基本功能。

1、指令的基本概念

指令:CPU能夠識別的計算機指令,由0和1組成的機器碼

計算機程序的最終執行都是通過指令來完成,由於指令都是0和1組成,程序員無法看懂,比如加法指令的機器碼是00000011,你那麼編程時就需要對機器碼進行翻譯,將0和1組成的機器碼翻譯成程序員能看懂的指令。所以就有了彙編語言,彙編語言本質上就是機器碼的翻譯,彙編語言的指令和機器碼是一一對應的,比如加法就是ADD。不過雖然彙編語言是程序員可以看懂的語言,不過彙編語言是低級語言,需要頻繁和計算機硬件如寄存器交互,這對於程序員而言並不友好,所以在彙編語言之上又有一種不需要和計算機直接交換的語言,也就是高級語言,如C語言。

高級語言到指令的過程爲:先將高級語言進行編譯,生成彙編語言,然後再通過彙編語言生成計算機能夠識別的機器碼,最終由CPU來執行對於的機器碼指令。

指令集有複雜指令集(CISC)精簡指令集(RISC)兩種

CISC是以硬件爲中心的指令集設計,指令的長度可變,支持複雜的指令,通過硬件來實現各種複雜的程序指令,所以指令集中的指令會比較多;

RISC是以軟件爲中心的指令集設計,指令的長度不變,通常用於簡單的指令,通過編譯器實現簡單指令的組合來完成複雜的功能,指令集中的執行比較少。

RISC架構中,將指令集精簡到20%的簡單指令,原先的複雜指令則通過簡單指令組合實現,讓軟件來實現硬件的功能。這樣CPU的硬件設計就比較簡單,在硬件層面提升了性能。

RISC的CPU完成指令的電路簡單了,就騰出更過的空間來給通用寄存器使用,因爲RISC完成同樣的功能需要執行的指令數量要比CISC多,需要反覆從內存中讀取指令和數據到寄存器中來,很多時間會花在訪問內存上,所以RISC架構的CPU需要比CISC架構更多的通用寄存器。

CISC架構典型代表是X86架構;RISC架構典型代表是ARM架構。 

2、指令的格式

指令由兩部分組成,分別是操作碼操作數地址碼

2.1、操作碼

操作碼指明指令操作性能的命令碼,如操作碼0000表示加法,0001表示減法操作,每條指令都要去它的操作碼必須是獨一無二,指令系統中每一個指令都有唯一的操作碼,指令不同操作碼肯定不同。

操作碼的長度取決於指令系統中支持的指令條數,如操作碼長度爲4,那麼指令系統中最多支持16條指令。

2.2、操作數地址碼

操作數地址碼用來描述指令的操作對象,地址碼中可以用操作數本身,頁可以指出操作數在存儲器中的地址或寄存器地址,或表示操作數在存儲器中的間接地址等。

一個指令中含有操作數地址可以沒有或者可能不止一個,比如加減法指令就需要兩個地址,考慮到需要保存操作結果的話還需要有一個存放結果的地址,考慮到還有下一條指令的話還需要存放下一條指令的地址等。

 如下圖分別是無操作數地址指令和有兩個操作數地址等指令結構
 

一個指令中包含二進制代碼的位數稱爲指令字長,而機器字長表示計算機能夠直接處理的二進制數據的位數,機器字長通常於主存單元的位數一致。

如果指令字長等於機器字長,成爲單字長指令;指令字長等於半個機器字長成爲半字長指令;指令字長等於兩個機器字長的指令成爲雙字長指令。

指令字長 = 操作碼位數 + (操作數地址個數) * (操作數地址碼位數)

機器碼指令的優點是指令的類型、所有操作參數以及下一條指令地址都存在單個指令中,缺點就是指令長度可能會比較長。

3、尋址方式

尋址方式指確定本條指令的數據地址以及下一條要執行的指令地址的方法。一般把指令中存放的操作數地址稱爲形式地址,從形式地址中得到有效地址的方式稱爲尋址方式。

3.1、指令尋址方式

指令的尋址方式有順序尋址和跳躍尋找兩種方式

順序尋址:指令在內存中是順序存儲,當前指令執行完成後順序執行下一條指令,需要配合程序計數器PC來計數指令的順序號,該順序號就是指令在內存中的地址;

跳躍尋址:當程序轉移執行時需要採用跳躍尋址,下一條指令地址不是通過程序計算器PC給出而是由當前指令給出,跳躍到新的地址後,程序計數器需要刷新成新的地址繼續順序執行。

3.2、操作數尋址方式

立即尋址

操作數地址中的數就是操作數,可以直接使用,無需訪問存儲器

直接尋址

操作數地址是操作數在存儲器內的直接地址,可以直接訪問一次存儲器拿到,不過直接地址長度會影響指令字長,所以直接尋址的地址長度通常有限制

間接尋址

操作數地址存儲的不是操作數在存儲器內的直接地址,而是操作數在存儲器內地址的地址,間接尋址方式需要訪問兩次存儲器,先拿到操作數地址,然後再根據地址訪問操作數。優點是可以利用的存儲器空間比較大;

另外當操作數地址發生變化時,也不需要修改指令,只需要修改指令地址對應的存儲器地址內存即可

變址尋址

操作數地址中的形式地址A與地址修改量X進行相加得到操作數有效地址EA,EA=A+X,其中X是地址修改量,成爲變址值,由變址器存儲。比如循環從連續地址操作時,就可以通過變址尋址的方式在原有地址基礎上進行修改即可。

變址器一般採用寄存器實現,稱爲變址寄存器

基址尋址

操作數地址中的形式地址A與基址相加得到操作數有效地址,基址通常數一個專門的基址寄存器或由指令指定一個寄存器存儲。基址寄存器通常用戶程序無法修改,由管理程序來操作。一般用於解決程序在存儲器中的定位和擴大尋址空間的問題。比如存儲空間比較大時,指令的地址碼無法直接訪問到存儲器所有單元,通常將整個存儲器劃分爲若干個段,段的首地址存放在基址寄存器或段寄存器中,指令地址碼存儲段內偏移量即可,訪問時由段首地址加上段內偏移量得到實際地址

相對尋址

操作數地址中的形式地址A與程序計數器PC作爲基址進行相加得到有效地址,形式地址作爲偏移量,有效地址爲EA=A+PC,相對地址主要用於轉移指令,相對尋址指操作數位置與當前指令之間的相對距離,若位移量不變,無論本指令位置在哪,操作數總是與當前指令保持一個相同距離,意味着這種指令不需要任何修改就能在主存的任意位置正確執行

寄存器尋址

操作數地址中的地址用寄存器編號代替,寄存器的作用由尋址方式碼來指定。寄存器可以用直接尋址方式或間接尋址方式

4、指令的分類

一臺計算機的指令系統通常有幾十條至幾百條指令,按照指令完成功能可以分爲幾個類型

1、數據傳輸類指令

用來完成計算機主機內部數據等存取操作,從操作對象區分,傳輸指令分爲以下幾種:

寄存器至寄存器(Register-Register,R-R)

存儲器至寄存器(Storage-Register,S-R)

寄存器至存儲器(Register-Storage,R-S)

存儲器至存儲器(Storage-Storage,S-S)

數據傳輸指令一次可以傳輸一個數據或一批數據,堆棧操作指令是一種特殊的數據傳輸指令,壓入指令(PUSH)把指定的操作數送入棧頂,彈出指令(POP)把棧頂頂數據取出,送到指令所指定的目的地。

2、算術運算類指令

算術運算指令包括加減乘除法等指令

3、邏輯運算類指令

邏輯運算指令主要是對布爾變量的運算,包括邏輯與、邏輯或、邏輯非和邏輯異或指令

4、移位指令

移位指令分爲算術移位、邏輯移位和循環移位三種,移位可以是左移或右移

5、程序控制類指令

用戶控制程序的流向,包括轉移指令、轉子與返回指令和程序中斷指令等

轉移指令包括無條件轉移和條件轉移指令,用於轉移到下一條指令;

轉子與返回指令用於調用子程序的指令,調用子程序時先將下一條指令的地址壓入堆棧保存,然後轉入所調用的子程序執行,子程序執行完成的返回指令把調用指令壓入的返回地址從堆棧中彈出,返回調用程序

程序中斷指令是計算機出現異常情況或特殊請求時隨機產生的,中斷指令作爲隱指令不提供給用戶使用

6、輸入輸出指令

處理器和外部設備通信的指令,包括輸入指令和輸出指令兩種;

7、字符串處理指令

用於字符串傳輸、比較、查詢和轉換等指令;

8、處理器控制類指令

包括停機指令、等待指令、空操作指令、開中斷指令、關中斷指令和設置條件碼指令等;

9、特權指令

在多用戶多任務的計算機系統中,特權指令用於系統資源的分配和管理,包括改變系統的工作方式、檢測用戶的訪問權限、修改虛擬存儲器管理的段表、頁表和完成任務的創建和切換等;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章