挑戰408——組成原理(17)——指令格式

好久沒更新了,放元旦本來打算跨個年,可惜外面太冷。還是我在家裏寫寫文章吧。
由開始的時候我們知道,計算機能解題,是由於機器本身存在一種語言,它既能理解人的意圖,又能被機器本身識別。機器語言,是由一條條語句構成的,每一條語句又能準確的表達某種語義(比如某種操作數,參與操作的數,或者其他的信息在何處)。而計算機就是通過連續執行每一條機器語句而實現全自動工作的。所以,人們把計算機執行某種操作的命令,稱爲機器指令。而一臺計算機能執行的全部指令集合稱作指令系統
機器的指令系統,集中反映了機器的功能。一臺機器只能執行自己指令系統中的指令,其他系統的指令它是完全看不懂。因此說,指令系統就是計算機的語言(所以有時候,C語言的程序在不同的機器中結果不同)。所以有條件的話,儘量做兼容機。
指令是計算機運行的最小功能單位,而指令系統是計算機的主要屬性,介於硬件和軟件之間。
在這裏插入圖片描述

指令格式

影響計算機指令格式的因素有:機器字長,存儲器容量,指令的功能
而指令通常需要反映以下幾點信息:

  • 作何操作
  • 如需要操作,去哪取指令呢?
  • 結果送至何處
  • 有無下一條指令?有的話去何處取?

而一條指令通常包括兩個方面:
在這裏插入圖片描述
解釋如下:

  1. 操作碼:表示該指令應該進行什麼性質的操作,如加減乘除,取數,存數等等。通常其位數反映了機器的操作種類,也就是機器允許的指令數(舉個例子,如果操作碼有7位,那麼這個機器最多可以包含2^7 = 128條操作指令)。操作碼也分爲定長操作碼(用於指令字長較長的情況如RISC)和不定長操作碼
  2. 地址碼:表示被操作數,操作數,以及操作結果和下一條指令地址(這裏的地址,可以主存地址,寄存器地址甚至是I/O地址)。根據地址碼中字段數目的不同,常常分爲下列的四種地址碼:(假設指令字長爲32位)
    • 四地址碼
      在這裏插入圖片描述
      該指令完成的是(A1)OP(A2) ->A3.後續的指令地址可以任意填寫(即A4),那麼它的尋址能力就是2^6 = 64.如果指示的地址字段均是指的主存地址,則一共需要訪問4次存儲器(因爲無論作何操作都需要取指令),然後取兩個操作數兩次,存放結果一次。
      程序大多數都是按順序執行,程序計數器PC能存放當前欲執行的指令的地址,又有計數功能,因此能自動形成下一條指令此時,A4便可以省去,形成三地址格式。

    • 三地址碼
      在這裏插入圖片描述
      完成操作(A1)OP(A2) ->A3.跟剛剛說的四地址碼一樣,需要經過四次訪存,但是其尋址地址範圍有所增加,爲2^8 = 256位。
      但是在機器的運行過程中,沒有必要把每次的運算結果都存入主存中,中間的結果可以暫存於A1,A3的字段中,或者是CPU的寄存器中(如ACC),這樣一來,又可以省去一個地址字段A3,從而得出二地址指令。

    • 二地址指令
      在這裏插入圖片描述
      可完成操作(A1)OP(A2)->A1.即A1字段中即代表的是源操作數地址,又代表存放本次運算結果的地址。當然也可以這樣(A1)OP(A2)->A2.跟上面的原理完全一樣。只不過用的是A2字段存放罷了。
      但是,如果用A1或者A2來存放結果,則需要訪問4次內存。若採用的是ACC存放結果,則需要3次訪存(因爲ACC在CPU中,不在內存中)。其尋址能力爲2^12 = 4K.
      再進一步,如果將操作數(其中一個)隱含在ACC中,則指令只需要給出一個地址碼,便可以構成一地址碼指令。
      二地址碼根據操作數的物理位置,分爲:
      SS(存儲器 - 存儲器類型)
      RS(寄存器 - 存儲器類型)
      RR(寄存器 - 寄存器類型)
      存取速度自上往下越來越快。

    • 一地址指令
      在這裏插入圖片描述
      完成操作:(ACC)OP(A1) ->ACC.也就是ACC存放的參與運算的數,又存放中間的結果。這樣完成該指令只需要2次訪存。尋址範圍爲2^24 = 16M.
      類似的可以有類似於(PC)+ 1 ->PC等等
      在指令系統中,還有一種指令,它不需要操作數,或者所需要的操作數是隱含指定的。這就是所謂的零地址指令。

    • 零地址指令
      這類操作一般用來進行停機,空操作,清除操作。對ACC內容操作,對堆,棧內容進行操作。隱含的操作數一般來自於棧頂,和次棧頂元素。

2018年最後一篇文章,祝大家新年快樂。明年這個系列會一直寫下去的。謝謝來看我博文的朋友們。

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