第五章 指令系統

指令系統概述

指令:控制計算機執行某種操作(加減乘除等)的命令
指令系統:計算機中所有指令的集合

指令通常包括以下內容:

  • 具體做什麼操作
  • 操作對象的來源
  • 操作結果的存放位置

指令系統是計算機系統性能的集中體現,是計算機軟硬件系統的設計基礎,一方面,硬件設計者要根據指令系統進行硬件的邏輯設計,另一方面,軟件設計者也要根據指令系統來建立計算機的系統軟件,如何表示指令,如何構建指令系統,直接影響計算機系統的軟硬件功能,一個完善的指令系統應該滿足下面4方面的要求:

  • 完備性
    編程時,指令系統直接提供的指令足夠使用,不必用軟件實現,即要求指令種類齊全,使用方便

  • 有效性
    用指令編寫的程序能高效運行,佔用資源少

  • 規整性
    規整性包括三個方面

    1. 對稱性:衡量指令對各種尋址方式的支持,即指令能同等對待存儲器/寄存器,指令能使用各種尋址方式
    2. 均齊性:衡量指令對各種數據類型的支持
    3. 一致性:指的是指令長度與數據長度的關係,通常是字節的整數倍
  • 兼容性
    機器上運行的程序,無需修改或者少量修改就能在另一臺計算機運行

指令格式

指令是計算機中傳輸控制信息的載體,每條指令代表某個基本的信息處理操作及操作的對象
一般的指令格式:

操作碼 + 操作數地址碼

操作碼

操作碼用來表示具體的操作性質,不同功能的指令其操作碼編碼不同
操作碼又可分爲兩種:

  • 固定長度操作碼:不僅操作碼長度固定,而且在指令中的位置也固定
  • 可變長操作碼:操作碼長度不固定,在指令中的位置也不固定

地址碼

地址碼字段的作用隨指令類型和尋址方式不同而不同,根據一條指令中所包含的操作數地址數量,可以分爲四種:

  • 三地址指令
    兩個操作數進行某種運算,其結果放入第三個操作數
  • 雙地址指令
    兩個操作數進行某種運算,其結果放回其中的一個操作數中
  • 單地址指令
    1. 單目運算符,如求反操作
    2. 將另一個操作數隱含於某個寄存器
  • 零地址指令
    1. 操作不需要地址,如NOP,WAIT等
    2. 需要一個操作數,但是隱含於某個寄存器
    3. 需要兩個操作數,但是都位於堆棧中

指令長度

指令長度是指指令的二進制位數,可以分爲:

  • 半字長指令
    指令字長等於半個機器字長,每個存儲單元可以存放兩條指令
  • 但字長指令
    指令字長等於一個機器字長,每個存儲單元可以存放一條指令
  • 多字長指令
    指令字長等於多個機器字長,多個存儲單元存放一條指令

指令和操作數的尋址方式

尋址方式:尋找指令或操作數有效地址的方法
運行程序之前,必須將指令和數據存放到主存中,主存是基於地址訪問的存儲器,只有獲得相應的地址,CPU纔可以訪問到主存中對應的內容

指令的尋址方式

順序尋址

順序尋址:程序中的指令序列往往是順序存放,如果知道第一條指令的地址,很容易得到下一條指令的地址
CPU用程序計數器PC保存下一條將被執行的指令地址,每執行一條指令,PC值自動加1,得到下一條指令的地址,這裏的加1,是指加一條指令佔用的存儲單元數,如32位系統中,一條指令4字節,因此按字節編址的情況下,實際是加4

跳躍尋址

當程序中出現分支或轉移時,會改變程序執行順序,這時採用跳躍尋址,下一條指令地址通過PC加上一個偏移值得到

操作數尋址方式

操作數尋址方式:形成操作數有效地址的方法
單地址指令結構:操作碼 OP+ 尋址方式特徵碼 I + 形式地址 D

立即數尋址

此時尋址方式特徵碼指示爲立即尋址,形式地址D是操作數本身,這個立即數作爲指令的一部分與指令一起存放在主存單元,取指令時送到指令寄存器中
特點:指令執行速度快,但是受指令所分配的位數限制,不能表示太大的數

直接尋址

直接尋址:指令的地址碼字段直接作爲操作數地址
此時特徵碼指出直接尋址方式,形式地址給出操作數的地址
特點:地址直觀,不需要通過計算就可以直接獲取到操作數地址,但是受位數限制,尋址範圍受限,不能表示太大的地址,數據地址改變時,程序也要改變,編程不變

間接尋址

特徵碼指出間接尋址方式,地址碼字段中的形式地址給出操作數地址的地址,因此D只是一個間接地址
特點:解決直接尋址範圍受限問題,用較短的地址碼訪問較大的主存空間

寄存器尋址

寄存器尋址:操作數在CPU內的某個通用寄存器中
這種方式下,取操作數不需要訪問主存,因此形式地址字段不表示主存地址,而是通用寄存器號
特點:不需要訪問主存,指令執行速度快,所需的地址碼短,指令長度可以縮短,節省內存空間

寄存器間接尋址

操作數的地址存放在寄存器中,指令的形式地址字段D給出的是寄存器號,以對應寄存器的內容爲地址訪問主存單元,得到操作數
特點:訪問一次寄存器和一次內存,相對於間接尋址訪問兩次內存,速度更快,所有既能擴展尋址範圍,又不增加訪問主存的次數

相對尋址

相對尋址:把程序計數器PC的內容加上指令中形式地址D,形成操作數的有效地址
特點:編程只要確定程序內部操作數與指令的相對距離,而無需確定操作數在主存中的絕對地址,便於實現程序浮動

變址尋址

用一個寄存器存放變化的地址,這個寄存器稱爲變址寄存器,同時用指令的形式地址字段存放一個偏移值,變址寄存器的內容與指令中形式地址D之和即爲操作數的有效地址
一般情況下,變址寄存器的內容每次操作後都會改變,而指令中的偏移量是不變的
對於某些指令,變址寄存器是隱含的,例如(SI 和 DI 寄存器),如果採用通用寄存器作爲變址寄存器,則需要顯式地指定
變址尋址一般用於對數組之類的線性數據訪問

基址尋址

用一個寄存器存放基地址,這個寄存器稱爲基址寄存器,同時用指令的形式地址字段存放變化的地址值,基址寄存器的內容與形式地址D之和即爲操作數據的有效地址
一般情況下,基址寄存器的內容不變,形式地址字段的內容一直變化,正好與變址尋址相反
CPU內部有專門的基址寄存器(BX 和 BP),因此基址寄存器將會隱藏,如果採用通用寄存器作爲基址寄存器,則需要指令中指出

和變址尋址的對比

  • 基址尋址面向系統,主要用於程序的重定位
  • 變址尋址面向用戶,主要解決程序循環問題

堆棧尋址

堆棧以先進後出的方式存儲數據,尋找存放在堆棧中的操作數地址的方法稱爲堆棧尋址
在內存中設置一個堆棧基地址,設置一個棧頂指針SP,即可形成堆棧空間

其它尋址

複合尋址

複合尋址是幾種尋址方式的組合,主要用於複雜指令集結構計算機

  • 變址尋址 + 間接尋址
  • 間接尋址 + 變址尋址
  • 相對尋址 + 間接尋址

段尋址

段尋址是爲了擴大尋址範圍,參考8086彙編

分頁尋址

爲了解決直接尋址中,受位數限制,尋址訪問有限的問題
將內存分頁,頁號提前送入,尋址時,將頁號與形式地址進行組合

指令系統類型

一個完善的指令系統應該包括的基本指令有:

  • 數據傳送指令
    數據傳送指令是計算機中最基本最常用的指令,主要用於兩個部件之間的數據傳送

  • 算數邏輯運算指令
    進行各類數據信息處理,包括各種算數運算以及邏輯運算

  • 移位操作指令
    分爲算數移位,邏輯移位,循環移位,對操作數進行移動

  • 堆棧操作指令
    堆棧操作主要是入棧和出棧,用於保存和恢復中斷和子程序調用時現場數據和指令地址,以及子程序調用的參數傳遞等

  • 字符串處理指令
    屬於非數值處理指令,便於直接用硬件支持非數值處理,一般包括字符串傳送,字符串比較,字符串查找,字符串抽取,字符串替換等

  • 程序控制指令
    用於控制程序運行的順序和選擇程序的運行方向,主要包括轉移指令,循環控制指令,子程序調用與返回指令

  • 陷阱指令
    陷阱是由於意外事故而導致程序執行中斷,發生這類時間將導致計算機無法正常工作,必須採取措施

  • 輸入輸出指令
    簡稱IO指令,用於主機與外部之間的數據輸入輸出,主機向外設發出各種控制命令

  • 其它指令
    NOP,WAIT等

指令格式設計及優化

指令格式的設計

指令一般由操作碼和地址碼組成,指令格式的設計首先要確定指令的編碼格式,在此基礎上還要確定操作碼字段和地址碼字段的大小和組合形式,以及各種尋址方式的編碼

指令編碼格式的設計

指令的編碼格式設計就是要確定指令是採用定長指令結構,變長指令結構,還是混合結構

  • 定長指令格式
    指令系統中,各種類型指令長度都相等,結構規整,有利於簡化硬件,但是容易出現冗餘碼點,指令不易拓展
  • 變長指令格式
    指令字的長度隨功能的不同而不同,結構靈活,指令碼點冗餘少,易於拓展,但是格式不規整,會導致控制複雜
  • 混合編碼指令格式
    是定長與變量的綜合,提供若干長度固定的指令字

操作碼的設計

滿足完備性是操作碼設計的基本要求,還要確認操作碼採用定長結構還是變長結構

地址碼的設計

地址碼要能爲指令提供必要的操作數,還要滿足指令系統的有效性和規整性

尋址方式的設計

一般將尋址方式單獨編碼,分配一個尋址方式字段

指令格式的優化

指令格式的優化設計的目的

  • 節省程序的存儲空間
  • 指令格式要儘量規整,以減少硬件譯碼的複雜程度
  • 不能降低指令的執行速度

操作碼優化

定長結構的操作碼雖然規整,譯碼簡單,但是冗餘嚴重,因此可以縮短長度,降低冗餘,主要有以下兩種方法

huffman編碼

將發生概率最高的指令,用最短的位數表示,出現概率較低的,用較長的位數表示
設某計算機指令系統中有n種不同的指令,第i種操作碼在程序種出現的概況爲pi,則編碼步驟爲

  • 把所有指令按照操作碼出現的概率從低到高的次序自左向右排列
  • 選取兩個概率最小的節點合併成一個概率值是兩者之和的新節點,並把這個新節點與其它還沒有合併的節點一起組成新節點集合,並按合併後的概率重新排序
  • 在新結點集合種選取兩個概率最小的節點進行合併,如此繼續,直到全部節點合併完畢
  • 最後得到的根節點概率爲1
  • 每個節點都有兩個分支,分別用0和1表示
  • 從根節點開始,逐級下移,到達屬於每條指令的概率節點,把沿線所經過的代碼組合起來,得到相應指令的操作碼編碼

擴展編碼

huffman操作碼的主要缺點是長度不規整,硬件譯碼困難,與地址碼共同組成固定長的指令比較困難,擴展編碼就是爲了解決上述問題

  • 等長擴展
    每次擴展位數相同,根據選擇位數不同,等長擴展也有很多不同的方法

  • 不等長擴展
    每次擴展位數不同

基於地址碼擴展的操作碼優化

通常在指令中用一個固定長度的操作碼字段對基本的指令進行編碼,對於不需要地址字段的指令,可以把操作碼擴展到地址碼字段

地址碼優化方法

地址碼優化的根本目的是縮短地址碼長度,用一個較短的地址碼錶示同一個較大的邏輯地址空間

  • 間接尋址方式:在存儲器低端開闢一個區域,將實際的地址存入,實現縮短地址碼的目的
  • 偏移尋址方式:由於局部性原理,使用偏移量位數可以比較短
  • 寄存器間接尋址:寄存器中存放實際地址,但是缺點是寄存器數量比較少

CISC和RISC的基本概念

複雜指令集計算機CISC

  • 指令系統複雜龐大,指令數目一般多達兩三百條
  • 尋址方式多
  • 指令格式多
  • 指令字長不固定
  • 訪存指令不加限制
  • 各種指令使用頻率相差大
  • 各種指令執行時間相差大
  • 大多數採用微程序控制器

精簡指令集計算機RISC

CISC典型程序中,80%的程序只用到了20%的指令集,因此提出RISC
針對CISC指令系統種類太多,指令格式不規範,尋址方式太多的缺點,減少指令種類,簡化尋址方式,方便處理器內部的並行處理,從而大幅提高CPU性能

特點:

  • 選取使用頻率高的指令,避免使用複雜指令
  • 大多數指令在一個機器週期內完成
  • 採用load/store結構,儘量減少主存訪問
  • 採用簡單的指令格式和尋址方式,指令長度固定
  • 固定的指令格式,可簡化指令的譯碼邏輯
  • 面向寄存器的結構,爲減少訪問內存,CPU內設置大量寄存器
  • 採用硬佈線控制邏輯
  • 注重編譯的優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章