计组—指令及寻址
指令
程序是由一系列指令組成的,指令是要計算機執行某種操作的命令。包括:微指令、宏指令、機器指令。
微指令:微程序級指令,屬于硬件
宏指令:由若干條機器指令組成的軟件指令,屬于軟件
機器指令:介于微指令和宏指令之間,每條指令可完成一個獨立的算術或邏輯運算
?
指令格式:
指令字(簡稱指令):表示一條指令的機器字。
指令格式:指令字用二進制代碼表示的結構形式,由操作碼字段和地址碼字段組成
操作碼字段:指令的操作特性與功能
地址碼字段:參與操作的操作數的地址碼
注:每條指令都有一個操作碼,表示指令應該進行什么性質的操作;不同指令操作碼字段編碼是不一樣的。
?
操作碼
操作碼可以分為固定長度和可變長度的代碼。
固定長度編碼:
即所以指令操作碼長度相同。
例:64條指令,采用固定長度操作碼,則需要6位編碼,2^6=64 (從000000~111111)
優點:編碼簡單;缺點:不利于增加新的指令
可變長度編碼:
即指令操作碼長度不同。
優點:擴展方便(便于增加新的指令);能夠縮短指令操作碼的平均長度,節約空間
缺點:編碼復雜
例:對100條指令進行編碼設計。
(1)采用固定長度操作碼編碼則需要7位操作碼(2^7=128,可以多于100但是不能少于100),其中前100(0-99)個用作操作碼,后28(100-127)個用于擴展;操作碼的平均長度=7
(2)采用不固定長度操作碼編碼,其中10條指令使用概率為90%,剩余90條指令使用概率為10%;
設計方案:可以先用4位代碼對10條常用指令進行編碼(2^4=16>10,剩余6個代碼用作擴展),由于剩余6個4位代碼,而我們還需要對其余90個指令進行編碼,那么我們可以在這剩余的6個4位代碼中進行擴展;90/6=15<2^4=16,即我們需要在剩余的6個位代碼中再擴展4位即可組成一個8位操作碼即可對余下的90個指令進行編碼;又因為2^4*6=96。所以我們還剩下最后6個8位編碼可用于擴展;
操作碼的平均長度為:4*90%+8*10%=4.4
?
地址碼
指令中指定操作數存儲位置的字段稱為地址碼
指令中可以有一個、兩個或者三個操作數,也可以沒有操作數。根據指令有幾個操作數地址,可將指令分為零地址指令(指令中沒有地址碼)、一地址指令、二地址指令、三地址指令。4個地址碼的指令很少使用。
?
二地址指令涉及到2個操作數地址,根據2個操作數地址存在的位置分為,寄存器-寄存器類型(RR)(即兩個操作數都在寄存器,速度快),寄存器-存儲器類型(RS)(一個數在寄存器,另一個數在存儲器),存儲器-存儲器類型(SS)(兩個數都在存儲器中,速度慢)
?
指令字
指令字長度:一個指令字中包含二進制代碼的位數(包含操作碼和地址碼),其長度應該與計算機的數據字長(機器字長)相匹配,以簡化指令訪存的操作。一般指令字長為機器字長的整數倍。
機器字長:計算機一次能直接處理的二進制數據的位數,它確定了計算機的運算精度。指令字長等于機器字長指令稱為單字長指令。使用多字長指令的缺點:必須多次訪問內存以取出一整條指令,降低了cpu的運算速度,又占用了更多的存儲空間。
?
操作碼的設計原則:
從操作碼較短的入手設計,即從短操作碼入手。
如指令長度固定的情況下,地址碼數量較多(即操作碼短)的指令中可以安排較短的操作碼,地址碼數量較少的指令中可以安排較長的操作碼。
?
指令和數據的尋址方式
操作數或指令的地址:某個操作數或某條指令存放在某個存儲單元時其存儲單元的編號。
尋址方式分類:指令尋址和數據尋址
指令尋址:確定下一條欲執行指令的指令地址
數據尋址:確定本條指令的操作數地址
?
指令尋址分類:順序尋址(pc + 1)、跳躍尋址(跳躍指令)
?
數據尋址方式有如下情況:
(1)存儲器尋址:操作數在內存中,指令的操作碼部分指明了操作數所在內存單元地址
(2)寄存器尋址:指令的地址碼部分指明了操作數所在的cpu中的一個寄存器
(3)立即數尋址方式:指令的地址碼部分就是操作數本身
?
地址碼分析
形式地址(A):指令字中的地址
有效地址(EA):操作數的真實地址
指令中所給出的地址碼,并不一定是操作數的有效地址。可能需要經過尋址特征將形式地址轉變為有效地址。
尋址過程就是把操作數的形式地址,變換為操作數的有效地址的過程。
?
常見的幾種尋址方式
(1).隱含尋址:指令中只給出來了一個操作數地址,另一個操作數存在于累加寄存器ACC中
特點:指令中少了一個地址字段,可縮短指令字長。
(2)立即尋址:指令中給出的形式地址不是地址而是操作數本身
特點:1.指令執行階段不訪問內存(速度快);2.指令中形式地址的位數限制了操作數的范圍
(3)直接尋址:?EA=A
指令中給出的形式地址就是操作數的有效地址,而不需要經過轉換再變為有效地址
特點:1.執行階段訪問一次內存(根據地址取出操作數);2.形式地址的位數決定了指令操作數的尋址范圍
(4)間接尋址:EA=(A)?
指令中給出的形式地址是操作數地址的地址;即需要根據形式地址找到內存中操作數的地址,然后根據內存中操作數的有效地址獲取內存中的操作數
特點:1.執行指令階段2次訪問內存 2.可擴大尋址范圍
(5)寄存器尋址:EA=Ri
指令中給出的形式地址就是有效地址即寄存器的編號,操作數位于寄存器中
特點:執行階段不訪問內存,只訪問寄存器,速度快
(6)寄存器間接尋址:EA=(Ri)
指令中給出的形式地址是寄存器中指定編號單元中的地址,即有效地址位于指定寄存器編號中的地址,然后根據地址訪存
特點:有效地址在寄存器中,操作數在存儲器中,執行階段訪問一次內存
(7)偏移尋址:EA=A+(R)
有效地址是計算出來的,即有效地址(EA)=形式地址(A)+寄存器(R),其中形式地址是顯示存在的,另一個地址字段隱含在某個專用寄存器R中。
常用的三種偏移尋址是相對尋址、基址尋址、變址尋址。
相對尋址:EA = A + (PC)?? (pc寄存器:當前正在執行的指令地址)
基址尋址:EA = A + (BR) ??(BR:基址寄存器)
變址尋址:EA = A + (IX)?? ? (IX: 變址寄存器)
形式地址A也稱位移量D(相對于當前指令的位移量)
(8)段尋址方式:操作數在內存中
?
CISC和RISC?
cisc(Complex Instruction Set Computer):復雜指令系統計算機
risc(Reduced Instruction Set Computer):精簡指令系統計算機
?
精簡指令系統
對于cisc指令系統而言,實際使用中,經常使用的指令占指令系統的20%,其使用頻度為80%。80%的指令使用頻度為20%。因此產生了RISC指令系統。
RISC指令系統的特點:
(1)選取使用頻率高的簡單指令
(2)指令長度固定,指令格式種類少
(3)只有取數/存數指令訪問存儲器,其余指令的操作都在寄存器之間(速度快)
?
例:精簡指令系統SPARC中,對于一些沒有選入指令系統的指令,可以通過指令集中的另外一條指令來代替實現
?
總結
- 上一篇: 计组—虚拟存储
- 下一篇: SQLldr_乔羽简介