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