【計算機組成原理】指令系統(一)


一、指令格式

指令:操作碼字段   地址碼字段

指令字(簡稱指令):表示一條指令的機器字。

指令格式:是指令自用二進制代碼表示的結構形式,由操作碼字段和地址碼字段組成。

操作碼字段:表征指令的操作特性與功能   (指令的唯一標識) 不同的指令操作碼不能相同

地址碼字段:指定參與操作的操作數的地址碼

二、操作碼分類

操作碼可以分為固定長度的代碼和可變長度的代碼

1、固定長度的代碼

     多有指令操作碼的長度相等

例如:某計算機共有64條指令,采用固定長度操作碼,需要6位編碼,從000000~111111  2的6次方為64

優點:編碼方法簡單,便於指令的譯碼

確定:不方便指令系統中增加新的指令(擴展不方便)

2、可變長度的代碼

不等長的指令操作碼可以減小操作碼的平均長度,提高指令編碼的效率,從指令的擴展性來看,也希望操作碼長度可變。

    例如:設某台計算機有100條指令,要求:

1)采用固定長度操作碼編碼,請設計其操作碼編碼

2)假設這100條指令中有10條指令的使用改了達到90%。其余90條指令的使用概率達到10%,請采用不定長編碼設計一種操作碼編碼的方案,並求出操作碼的平均長度(常用指令用短編碼  不常用指令用長編碼)

答、1)采用固定長度操作碼編碼,需要7位操作碼,取其中100個代碼作為操作碼 0000000~1100011之間的代碼代表100條指令(長度為7)

其余的1100100~1111111共28個代碼可用於增加新的操作碼

2)采用不固定長度的操作碼編碼,可以用4位代碼對10條指令進行編碼,用8位代碼對90條指令進行編碼

0000~1001對應10條常用的指令,從未使用的1010~1111的代碼后面擴展4位 

10100000~10101111     16個

10110000~10111111     16個

11000000~11001111     16個

11010000~11011111     16個

11100000~11101111     16個

11110000~11111001     10個

已上的1010 ,0000~1111,1001之間的90個代碼表示其余90條指令

指令操作碼的平均長度為:

4*90%+8*10%=4.4  小於等長編碼的7位

剩余的編碼11111010~1111111(6個)可用於操作碼長度的進一步的擴展

例:設有一台簡單計算機的指令系統共有10條指令,各指令的使用頻率如下:

11  20%  12 12%   13  11%  14  15%  15  8%  16 3%  17   2%   18  18%  19  10%  110 1%

1)用霍夫曼編碼設計這10條指令的操作碼,並計算操作碼的平均長度

2)設計只有2中長度,且平均長度不大於3.20位的等長擴展操作碼,並計算操作碼的平均長度

答:1)霍夫曼樹為

霍夫曼編碼結果如:(左支代表0  右支代表1  從最后邊0.20開始霍夫曼編碼如下)

11  011 010  001 101 100 0001 00001 000001 000000

平均長度:3.03 =2*0.2+3*-.18+3*0.15+....

2)一種設計方案是取3位和4位兩種長度,如000 001  010 011 100 101  1100 1101 1110 1111

平均長度為3.14

3位可以表示8種編碼,我們選取7個來表示三位編碼,還剩4個需要擴展 也就是需要2位

另一種設計方案是選擇3和5兩種長度,如:000 001 010 011 100 101 110  11100 11101 11110 

平均長度為3.12

選取3位表示7個 然后固定前3位為111 擴展2位 2的2次方就是4>3 也滿足

三、地址碼

指令中指定操作數存儲位置的字段稱為地址碼,地址碼中可以包含存儲器地址。也可包含寄存器編號。

指令中可以有一個、兩個或者三個操作數,也可沒有操作數,根據一條指令有幾個操作數地址,可將指令分為零地址指令。一地址指令、二地址指令、三地址指令。4個地址碼的指令很少被使用。

操作碼字段 地址碼
操作碼 A1 A2 A3 三指令地址
操作碼 A1 A2 二指令地址
操作碼 A1 一指令地址
操作碼   零指令地址

零地址指令:只有操作碼,沒有地址碼(空操作  停止等)

一地址指令:指令編碼中只有一個地址碼,指出了參加操作的一個操作數的存儲位置,如果還有另一個操作數則隱含在累加器中

eg: INC AL 

       INC [S1]

二地址指令:指令編碼中有兩個地址,分別指出了參加操作的兩個操作數的存儲位置,結果存儲在其中一個地址中

(op a1,a2:a1 op a2 a1)

eg:  MOV AL ,BL

      ADD AL,30

三地址指令:指令編碼中有3個地址碼,指出了參加操作的兩個操作數的存儲位置和一個結果的地址

(op a1,a2,a3: a1 op a2  a3)

二地址指令格式中,從操作數的物理位置來說有可歸為三種類型

寄存器-寄存器(RR)型指令:需要多個通用寄存器或個別專用寄存器,從寄存器中取操作數,把操作結果放入另一個寄存器,機器執行寄存器-寄存器型的指令非常快,不需要訪存。

寄存器-存儲器(RS)型指令:執行此類指令時,既要訪問內存單元,又要訪問寄存器。

存儲器-存儲器(SS)型指令:操作時都是涉及內存單元,參與操作的數都是放在內存里,從內存某單元中取操作數,操作結果存放至內存另一單元中,因此機器執行指令需要多次訪問內存。

四、指令字

指令字長度:一個指令字中包含二進制代碼的位數,其長度應該與計算機的數據字長相匹配,以簡化指令訪存的操作,一般指令字長為計算機字長的整數倍。

機器字長:計算機能直接處理的二進制數據的位數,他決定了計算機的運算精度。指令字長等於機器字長稱為單字長指令。

指令字長等於兩個機器字長指令稱為雙字長指令,三字長以上指令較少使用。

使用多字長指令,目的在於提供足夠的地址位來解決訪問內存任何單元的尋址問題。

缺點:是必須兩次或多次訪問內存以取出一整條指令,降低了CPU的運算速度,又占用了更多的存儲空間。

五、操作碼的設計

操作碼的設計應當與地址碼的設計相匹配,以形成高效合理的指令編碼。

如指令長度固定的情況下,地址碼數量較多的指令可以安排較短的操作碼,地址碼數量較少的指令中可以安排較長的操作碼。

例、某計算機要求如下形式的指令:三地址指令4條,單地址指令254條,0地址指令16條,設指令字長12位每個地址碼3位,設計其編碼。

答:3地址指令  3位操作碼   9位地址碼 

1地址指令   9位操作碼   3位地址碼 

0地址指令12位操作碼

先設計3地址操作碼用000~011這4個編碼作為3地址指令操作碼

單地址指令地址碼是3位,操作碼最多可以9位,前3位用了4個還剩4個

一地址指令中操作碼可擴展9位  2的6次方64個

100 xxx xxx     1地址的64條 (100 000 000~100 111 111)

101 xxx xxx     1地址的64條(101 000 000~101 111 111)

110 xxx xxx     1地址的64條 (110 000 000~110 111 111)

111 xxx xxx     1地址的62條 (111 000 000~111 111 111)

剩余為111111110   0地址的8個

           111111111   0地址的8個

例:計算機指令長度為20位,有2地址指令,1地址指令,0地址指令。地址碼長度為6位,問若操作碼字段固定長度為8位,先設計出m條2地址指令,n條0地址指令,此時改計算機最多可以有多少條1地址指令。

答:

           操作碼(20-12=8位)  地址碼 8位    地址碼8位

因為操作碼字段固定長度為8位,1地址指令為m條,0地址指令為n條,最多可以設計出1地址指令為2的8次方-m-n條

例:某16位計算機指令格式如下所示,其中OP為操作碼,試分析指令格式的特點

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OP   源寄存器 目標寄存器

答:單字長二地址指令

      操作碼字段op可以指定128條指令(2的7次方)

      源寄存器和目標寄存器都是通用寄存區(可分別指定16個通用寄存器)所以是RR型指令,兩個操作數均在寄存器中

 

例:16位機指令格式如下。op為操作碼字段,試分析指令格式特點

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OP     源寄存器 變址寄存器
位移量(16位)

答:雙字長(指令32位 機器16位)二地址指令,用於訪問存儲器

操作碼字段op為6位,可以指定64種操作

一個操作數在源寄存區(16個),另一個操作數在存儲器中(由變址寄存器和位移量決定)所以是RS行指令。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM