基本介紹
- 中文名:四地址
- 外文名:four-address
- 所屬領域:計算機組成原理
- 所屬問題:計算機的指令系統
- 相關概念:指令,指令系統等
基本介紹,指令集,指令格式,指令格式中符號的約定,運算元的地址部分,
基本介紹
機器執行一條指定命令所需要的全部信息都必須明顯地或隱晦地包含在指令格式裡面,一般來說,這些信息包括:
1.操作碼(它代表要執行的當前機器命令)。
2.機器進行操作時所要用到的第一個運算元的地址。
3.機器進行操作時所要用到的第二個運算元的地址。
4.結果地址(運算結果將存入機器里的這一地址)。
5.下條指令的地址(執行完本條指令後將從此地址取出下一條指令)。
如果所有這些參數都明顯地見之於機器命令中,這樣的指令格式就叫做四地址指令格式(參閱表1),這種格式的最主要優點可能就是在機器的指令系統中不必使用BRANCH(轉移)指令,每條指令本身都明顯地指出下一次要執行的指令位於何處。
操作碼 | 第1運算元地址 | 第2運算元地址 | 結果地址 | 下一條指令地址 |
此外,由於有關的運算元地址和結果地址都明確指定好,因而各個運算元和結果可以各自分散在主存儲器中。四地址指令在一個指令周期內就可以處理所有這些變數,不必使用中間存儲器,但是,如果各個運算元都處於主存儲器中,而且所得的運算元也要放到主存儲器裡面,那么,在這一個指令周期內就得進行幾次存儲器訪問。
下面的示範性程式說明如何使用四地址指令去求解下列式子:
4地址程式 | 機器內部操作 |
I1.MUL G,H,T1,I2 | 1.T1←G*H;下條指令暫存器←I2地址 |
I2.MUL D,E,T2,I3 | 2.T2←D*E;下條指令暫存器←I3地址 |
I3.DIV T2,F,T3,I4 | 3.T3←(D*E)/F;下條指令暫存器←I4地址 |
I4.ADD C,T3,T4,I5 | 4.T4←[C+(D*E)/F3;下條指令暫存器←I5地址 |
I5.ADD B,T4,T5,I6 | 5.T5←[B+C+(D*E)/F];下條指令暫存器←I6地址 |
I6.DIV T5,T1,A,I7 | 6.A←[B+C+(D*E)/F]/(G*H);下條指令暫存器←I7地址 |
I7.HLT | 7.終止所有機器操作 |
說明:1.T1,T2,T3,T4和T5為臨時存儲位置,有了這些位置之後,程式中所用到的所有變數在計算過程中就不會被衝掉。 2.由於每條指令中都含有下條指令的地址,因此,每條指令也起著轉移命令的作用。 3.所以,指令不必依照順序執行。 |
請注意,每條指令本身都含有轉移命令,指令的執行不必循著連續的存儲器位置依次進行。
四地址格式的主要缺點是需要的存儲器字長較長。例如,如果每個地址都需要12位來單獨說明,為了描述所需要的四個地址就需要48位,再加上操作碼的位數,四地址格式的指令字總長度就很大了,由於考慮到存儲器和有關硬體的成本,因此,小型機和微型機從來就不使用這種指令格式,但是,在微程式控制方面還是使用了四地址格式;這樣做需要增加微程式存儲器的字長,但卻達到提高處理機性能的目的。
指令集
指令集即指令系統,表征了計算機的基本功能。
指令系統是計算機硬體的語言系統。為此也叫機器語言、即機器語言程式設計師看到的機器的主要屬性,從這一方面說,指令系統是軟體和硬體的主要交界面,是計算機系統結構所研究的核心內容之一。
各計算機執行的指令系統不僅決定了機器所要求的能力,而且也決定了指令的格式和機器的結構;而不同結構的機器和不同的指令格式,應該具有與之相匹配的指令系統。
計算機的運行,就是計算機的中央處理器逐條執行各種指令的過程。
指令格式
一條指令應包含的信息有:操作碼;源運算元地址;目的運算元地址;下一條指令地址等,這由指令格式來表現。
根據不同的機器,指令的格式也是多樣化的,為了使硬體能夠識別並能執行不同類型的操作,指令必須是二進制編碼。指令字一般為計算機的一個字長度,在該字中包含操作碼、地址碼、各種特徵和校驗碼等信息。
現以算術運算指令為例說明指令格式的構成。首先要指定機器運算的類型是加法還是減法,其次要給出兩個做算術運算的運算元,並指出將運算結果存放到哪裡去。
指令格式可由以下兩部分信息組成:
1.操作部分
操作部分即為表示操作類型的操作碼,用OP(operation part)表示。指令的操作碼錶示該指令應進行什麼性質的操作,如進行加法、減法、乘法、除法、取數、存數等等。不同的指令用操作碼欄位的不同編碼來表示,每一種編碼代表一種指令。
操作碼在彙編語言中一般是英語單詞或縮寫來唯一對應其二進制代碼,所以也叫指令記憶符或助憶符,如數據傳送指令為MOV。
設計計算機時,對指令系統的每一條指令都要規定一個操作碼。根據已定義的這個代碼,機器經解碼後就能使計算機按規定操作去執行。
指令系統中的指令條數或指令類型的多少取決於給出操作碼位數行的大小。常規認為,行越大,則指令條數(2n)越多,功能越強,指令系統的規模也就越大。
組成操作碼欄位的位數n一般取決於計算機指令系統的規模。較大的指令系統就需要更多的位數來表示每條特定的指令。
一般來說,一個包含n位的操作碼最多能夠表示2n條指令。即:含有n條指令的指令系統或指令集,OP欄位至少應為位。
那么是否操作碼位數越多越好呢? 不一定。CPU 用指令暫存器IR(instructionregister)接受並表示指令。指令的長度受到機器結構的限制。機器字長表示機器內部數據通道和工作暫存器的寬度,是各種因素綜合表現的屬性,指令長度也要適合這個要求。確定操作碼的長度要考慮兩個方面:①用儘可能短的欄位來表達全部指令;②硬體的實現儘可能簡單。
兩方面都最優是不可能的。一般涉及OP位數的指令編碼有三種情況:固定長度編碼、Huffman編碼、擴展編碼。
固定長度編碼是最簡單的編碼方法。其OP長度固定,指令規整。硬體解碼簡單,在字長較長可以開支的大中型計算機及RISC(精簡指令集計算機)中使用。IBM-370計算機就是固定8位為OP。固定長度編碼的缺點是浪費位,信息冗餘度大,程式加長。
Huffman編碼方法中的OP是變長的。這種編碼把使用頻率高的指令的OP用較少的位數,使用頻率低的指令的OP用較多的位數,以此縮短程式長度。指令的使用頻率由使用中的典型程式進行統計而得到。Huffman編碼方法的缺點是,由於OP位數不固定,使解碼困難,控制器的設計複雜化。
擴展編碼在指令長度固定的情況下,OP長度隨地址碼A的減少而增加。這樣可以在不加長指令的情況下擴展OP的位數,使指令條數增加。擴展編碼方法的缺點是增加了指令解碼的難度。
一條指令所占有的位數稱指令字長。指令字長取決於OP長度、D的長度和D的個數。不同機器的指令字長是不一樣的。
設計時要考慮:指令字長是位元組的倍數、OP長度要覆蓋全部功能指令。
定長指令結構時,OP位數固定而使地址碼受限,這時要用“定址”方法來擴大地址範圍;或者採用可變字長指令結構來充分利用有限的字長位數。
指令格式中符號的約定
以下介紹指令格式和後面指令舉例時,所用符號服從以下約定:
OP:表示操作碼,即命令、操作性質,如加、政、取數、存數、移位、清零、停機等。
Di:表示地址碼,這些地址可以是記憶體中的單元地址,也可以是運算器中通用暫存器名。
Mi:主存記憶體單元。
Ri:暫存器,
→或←:表示把操作(運算)結果傳送到指定的地方。
( ):表示地址的內容,例如,如果3表示3 號地址,那么(3) 即表示3號地址中存放的
內容、假定內容是A時,則(3)=A。
;:在記憶符指令方式下表示對指令功能的解釋和說明,如MOV AX,BX;AX←(BX)。
PC:指令計數器,是一種暫存器,內裝正在執行的指令或立即要執行的下一條指令的地址。本暫存器有自動加1功能,PC←(PC) + 1表示取下一條指令地址。
AC/AX:累加器。
SP(stack pointer ):堆疊指針。
運算元的地址部分
地址部分除指定運算元地址和運算結果的地址外,可按地址部分的數量多少有各種規定格式,有四地址指令格式、三地址指令格式、二地址指令格式、單地址(一地址)指令格式、零地址指今格式和多地址指令格式。
根據一條指令中有N個運算元地址,可將該指令稱為N運算元指令或N地址指令。如有3個運算元地址的指令稱為三地址指令或三運算元指令。
四地址指令格式:
OP | D1 | D2 | D3 | D4 |
這裡D1是第一運算元地址,D2是第二運算元地址,D3是運算結果地址,D4是下一條指令地址。
指令功能:[D1]OP(D2)→D3(D4)=下一條指令地址( 非連續地址執行)→PC。第一運算元地址中的內容與第二運算元地址中的內容進行OP運算,運算結果送人第地址中去,同時指出執行的下一條指令的地址。明顯被執行的下一條指令的地址不是連續的。