1. 程式人生 > >【筆記】指令系統(一)

【筆記】指令系統(一)

一、機器指令

  每一條機器語言的語句稱為機器指令,而又將全部機器指令的集合稱為機器的指令系統

1.指令的一般格式

  指令是由操作碼地址碼兩部分組成的。

操作碼

  操作碼用來指明該指令索要完成的操作,如加法、減法、傳送、移位、轉移等。通常,其位數反映了機器的操作種類,也即機器允許的指令條數。
  操作碼的長度可以是固定的,也可以是變化的。前者將操作碼集中放在指令字的一個欄位內,如圖所示。這種格式便於硬體設計,指令譯碼時間段,廣泛用於字長較長的、大中型計算機和超級小型計算機以及RISC中。


這裡寫圖片描述

  對於操作碼長度不固定的指令,其操作碼分散在指令字的不同欄位中。這種格式可有效地壓縮操作碼的平均長度,在字長較短的微型計算機中被廣泛採用。
  通常採用擴充套件操作碼技術,使操作碼的長度隨地址數的減少而增加,不同地址數的指令可以具有不同長度的操作碼,從而在滿足需要的前提下,有效地縮短指令字長。


這裡寫圖片描述

  在設計操作碼不固定的指令系統時,應儘量考慮安排指令使用頻度(即指令在程式中出現的概率)高的指令佔用短的操作碼,對使用頻度低的指令可 佔用較長的操作碼,這樣可以縮短經常使用的指令的譯碼時間。

地址碼

  地址碼用來指出該指令的源運算元的地址(一個或兩個)、結果的地址以及下一條指令的地址。這裡的“地址”可以是主存的地址,也可以是暫存器的地址,甚至可以是I/O裝置的地址。

  (1)四地址指令


這裡寫圖片描述

其中,OP為操作碼;A1為第一運算元地址;A2為第二運算元地址;A3為結果地址;A4為下一條指令的地址。
  如果地址欄位均指示主存的地址,則完成一條四地址指令,共需訪問4次儲存器(取指令一次,取兩個運算元兩次,存放結果一次)。

  (2)三地址指令


這裡寫圖片描述

  因為程式中大多數指令是按順序執行的,而程式計數器PC既能存放當前欲執行指令的地址,又有計數功能,因此它能自動形成下一條指令的地址。這樣,指令字中的第四地址欄位A4便可省去,即得三地址指令格式。
  它可完成(A1)OP(A2)A3的操作後,後續指令的地址隱含在程式計數器PC之中。三地址指令運算元的直接定址範圍可達28=256。同理,若地址欄位均為主存地址,則完成一條三地址指令也需訪問4次儲存器。

  (3)二地址指令


這裡寫圖片描述

  機器在執行過程中,沒有必要將每次運算結果都存入主存,中間結果可以暫存在CPU的暫存器(如ACC)中,這樣又可省去一個地址欄位

A3,從而得出二地址指令。
  它可完成(A1)OP(A2)A1的操作,即A1欄位既代表源運算元的地址,又代表存放本次運算結果的地址。有的機器也可以表示(A1)OP(A2)A2的操作,此時A2除了代表源運算元的地址外,還代表中間結果的存放地址。這兩種情況完成一條指令仍需訪問4次儲存器。如果使其完成(A1)OP(A2)ACC,此時,它完成一條指令只需3次訪存,它的含義是中間結果暫存於累加器ACC中。二地址指令運算元的直接定址範圍為212=4K

  (4)一地址指令


這裡寫圖片描述

  如果將一個運算元的地址隱含在運算器的ACC中,則指令字中只需給出一個地址碼,構成一地址指令。
  它可完成(ACC)OP(A1)ACC的操作,ACC既存放參與運算的運算元,又存放運算的中間結果,這樣完成一條一地址指令只需兩次訪存。一地址指令運算元的直接定址範圍達224,即16M。

  (5)零地址指令
  零地址指令在指令字中無地址碼,例如,空操作(NOP)、停機(HLT)這類指令只有操作碼。而子程式返回(RET)、中斷返回(IRET)這類指令沒有地址碼,其運算元的地址隱含在堆疊指標SP中。
  用一些硬體資源(如PC、ACC)承擔指令字中需指明的地址碼,可在不改變指令字長的前提下,擴大指令運算元的直接定址範圍。此外,用PC、ACC等硬體代替指令字中的某些地址欄位,還可縮短指令字長,並可減少訪存次數。
  地址欄位表示暫存器時,也可有三地址、二地址、一地址之分。它們的共同點是,在指令的執行階段都不必訪問儲存器,直接訪問暫存器,使機器執行速度得到提高(因為暫存器型別的指令只需在取值階段訪問一次儲存器)。

2.指令字長

  指令字長取決於操作碼的長度、運算元地址的長度和運算元地址的個數
  為了提高指令的執行速度和節省儲存空間,通常儘可能把常用的指令(如資料傳送指令、算邏運算指令等)設計成單字長或短字長格式的指令。通常指令字長取8的整數倍。

二、操作型別

1.運算元型別

  機器中常見的運算元型別有地址、數字、字元、邏輯資料等。

2.操作型別

資料傳送

  資料傳送包括暫存器與暫存器、暫存器與儲存單元、儲存單元與儲存單元之間的傳送。

算術邏輯操作

  這類操作可實現算術運算和邏輯運算。有些機器還具有位操作功能,如位測試(測試指定位的值)、位清除(清除指定位)、位求反(對指定位求反)等。

移位

  移位可分為算數移位、邏輯移位、迴圈移位三種。

轉移

  轉移指令按其轉移特徵又可分為無條件轉移、條件轉移、跳轉、過程呼叫與返回、陷阱等幾種。
  (1)無條件轉移
  無條件轉移不受任何條件約束,可直接把程式轉移到下一條需執行指令的地址。
  (2)條件轉移
  條件轉移是根據當前指令的執行結果來決定是否需要轉移。若條件滿足,則轉移;若條件不滿足,則繼續按順序執行。
  還有一種條件轉移指令,SKP,它暗示其下一條指令將被跳過,從而隱含惡劣轉移地址是SKP後的第二條指令。

  (3)呼叫與返回
  通常呼叫指令包括過程呼叫、系統呼叫、子程式呼叫。它可實現從一個程式轉移到另一個程式的操作。
  呼叫指令(CALL)一般與返回指令(RETURN)配合使用。CALL用於從當前的程式位置轉至子程式的入口;RETURN用於子程式執行後重新返回到原程式的斷點。
  需注意以下三點:

  • 子程式可在多處被呼叫
  • 子程式呼叫可出現在子程式中,即允許子程式巢狀。
  • 每個CALL指令都對應一條RETURN指令。

  返回地址可存放在以下3處:

  • 暫存器內。機器內設有專用暫存器,專門用於存放返回地址。
  • 子程式的入口地址內。
  • 棧頂內。現代計算機都設有堆疊,執行RETURN指令後,便可自動從棧頂內取出應返回的地址。

  (4)陷阱與陷阱指令
  陷阱其實是一種意外事故的中斷。一旦出現意外故障,計算機就發出陷阱訊號,暫停當前程式的執行,轉入故障處理程式進行相應的故障處理。
  計算機的陷阱指令一般不提供給使用者直接使用,而作為隱指令(即指令系統中不提供的指令),在出現意外故障時,由CPU自動產生並執行。也有的機器設定供使用者使用的陷阱指令或“訪管”指令,利用它完成系統呼叫和程式請求。

  (5)輸入輸出
  通常設有輸入輸出指令,它完成從外設中的暫存器讀入一個數據到CPU的暫存器內,或將資料從CPU的暫存器輸出至某外設的暫存器中。

  (6)其他
  包括等待指令、停機指令、空操作指令、開中斷指令、關中斷指令、置條件碼指令等。
  在多使用者、多工的計算機系統中,還設有特權指令,這類指令只用用於作業系統或其他系統軟體,使用者是不能使用的。在有些大型或巨型機中,還設有向量指令,可對整個向量或矩陣進行求和、求積運算。