指令基本格式
指令簡單說來就是機器語言的語句。
指令由操作碼(OP)和地址碼(A)兩方面構成。
地址碼的作用:
指出操作數的地址
給出結果存放的地址
指出下一條指令的地址
(以上地址可以是主存地址、寄存器地址、I/O地址)
地址碼可以是操作數本身、操作數地址或者操作數地址的計算方法。
每一條指令都包含操作碼(每一條指令都必須告訴CPU該指令做什么操作)。
地址碼
四地址指令
OP | A1 | A2 | A3 | A4 |
OP:操作碼;A1、A2:第一操作數和第二操作數;A3:存放運算結果的地址;A4:下一條指令的地址。
執行四地址指令需要訪問4次存儲器(取指令一次,取操作數兩次,存放結果一次)
缺點:占用存儲空間
設指令字長為32位,操作碼占8位,4個地址字段各占6位,則指令操作數的直接尋址范圍為26=64
三地址指令
OP | A1 | A2 | A3 |
去掉A4:
程序計數器PC既能存放當前欲執行指令的地址,又有計數功能,可自動形成下一條指令的地址碼。
OP:操作碼;A1、A2:第一操作數和第二操作數的地址;A3:存放運算結果的地址;
執行四地址指令需要訪問4次存儲器(取指令一次,取操作數兩次,存放結果一次)
缺點:占用存儲空間
設指令字長為32位,操作碼占8位,3個地址字段各占8位,則指令操作數的直接尋址范圍為28=256
二地址指令
OP | A1 | A2 |
后續指令的地址隱含在程序計數器中
得到的結果覆蓋以前的源操作數,而不是存儲到新的主存地址中。
OP:操作碼;A1、A2:其中一個作為操作數的地址,另一個既作為操作數的地址,又用於存放本次運算結果的地址。
執行四地址指令需要訪問4次存儲器(取指令一次,取操作數兩次,存放結果一次)
設指令字長為32位,操作碼占8位,2個地址字段各占12位,則指令操作數的直接尋址范圍為212=4K
注意:若將結果存放到寄存器中,則只需要3次訪問存儲器(取指令一次,取操作數兩次)
一地址指令
OP | A1 |
其中一個操作數隱藏在運算器的ACC中,這樣,取其中一個源操作數就可以直接在ACC中進行了,而且金基金需要訪問一次存儲器去另外一個操作數就夠了
零地址指令
停機指令、空指令不需要地址碼
地址碼總結
可以用硬件來換取空間,即使用諸如PC、ACC等硬件來減少指令字中需指明的地址碼,可在不改變指令字長的前提下,擴大指令操作數的直接尋址范圍。此外,還可以使用諸如PC、ACC等硬件縮短指令字長以及減少訪存次數。
以上討論的地址均為主存地址格式,實際上,地址格式也可以是用來表示寄存器的編號(當CPU中含有多個通用寄存器時,對每一個寄存器賦予一個編號,便可以指明源操作數和結果存放在哪一個寄存器中)。當地址字段表示寄存器時,也可由三地址、二地址、一地址之分,它們的共同點是,在指令執行階段都不必訪問存儲器(只需在取指令是訪問一次存儲器),直接訪問寄存器,使機器運行速度得到提高。
定長操作碼
定長操作碼指令是指在字的最高位部分分配固定的若干為表示操作碼。對於具有n位操作碼字段的指令系統,最多能夠表示2n條指令。
擴展操作碼指令格式
特點
- 操作碼長度不固定;
- 操作碼的長度隨地址碼個數的減少而增加;
- 不同的地址數可以具有不同長度的操作碼。
- 在滿足需要的前提下,有效縮短了指令字長。
舉例
從王道考研盜了張圖:
原則
- 不允許短碼是長碼的前綴
- 各指令的操作碼一定不能重復