要使確定的機(jī)器指令序列控制計(jì)算機(jī)自動(dòng)連續(xù)地進(jìn)行預(yù)定的信息處理,一條機(jī)器指令除包含2個(gè)操作數(shù)的地址(大多數(shù)算術(shù)運(yùn)算操作要求2個(gè)操作數(shù))外,還要一個(gè)存運(yùn)算操作結(jié)果的地址及一個(gè)取下條指令的地址。其中前3個(gè)是存取操作數(shù)的地址,后一個(gè)是取指令的地址。如果都在指令碼中明確地表示出來(lái),就稱之為四地址機(jī)器指令。在這樣的指令碼中,除操作碼域外,原來(lái)的操作數(shù)地址碼域部分包含了4個(gè)地址碼。
基本介紹機(jī)器執(zhí)行一條指定命令所需要的全部信息都必須明顯地或隱晦地包含在指令格式里面,一般來(lái)說(shuō),這些信息包括:
1.操作碼(它代表要執(zhí)行的當(dāng)前機(jī)器命令)。
2.機(jī)器進(jìn)行操作時(shí)所要用到的第一個(gè)操作數(shù)的地址。
3.機(jī)器進(jìn)行操作時(shí)所要用到的第二個(gè)操作數(shù)的地址。
4.結(jié)果地址(運(yùn)算結(jié)果將存入機(jī)器里的這一地址)。
5.下條指令的地址(執(zhí)行完本條指令后將從此地址取出下一條指令)。
如果所有這些參數(shù)都明顯地見之于機(jī)器命令中,這樣的指令格式就叫做四地址指令格式(參閱表1),這種格式的最主要優(yōu)點(diǎn)可能就是在機(jī)器的指令系統(tǒng)中不必使用BRANCH(轉(zhuǎn)移)指令,每條指令本身都明顯地指出下一次要執(zhí)行的指令位于何處。
|| || 表1 四地址指令格式
此外,由于有關(guān)的操作數(shù)地址和結(jié)果地址都明確指定好,因而各個(gè)操作數(shù)和結(jié)果可以各自分散在主存儲(chǔ)器中。四地址指令在一個(gè)指令周期內(nèi)就可以處理所有這些變量,不必使用中間存儲(chǔ)器,但是,如果各個(gè)操作數(shù)都處于主存儲(chǔ)器中,而且所得的操作數(shù)也要放到主存儲(chǔ)器里面,那么,在這一個(gè)指令周期內(nèi)就得進(jìn)行幾次存儲(chǔ)器訪問(wèn)。
下面的示范性程序說(shuō)明如何使用四地址指令去求解下列式子:
|| ||
請(qǐng)注意,每條指令本身都含有轉(zhuǎn)移命令,指令的執(zhí)行不必循著連續(xù)的存儲(chǔ)器位置依次進(jìn)行。
四地址格式的主要缺點(diǎn)是需要的存儲(chǔ)器字長(zhǎng)較長(zhǎng)。例如,如果每個(gè)地址都需要12位來(lái)單獨(dú)說(shuō)明,為了描述所需要的四個(gè)地址就需要48位,再加上操作碼的位數(shù),四地址格式的指令字總長(zhǎng)度就很大了,由于考慮到存儲(chǔ)器和有關(guān)硬件的成本,因此,小型機(jī)和微型機(jī)從來(lái)就不使用這種指令格式,但是,在微程序控制方面還是使用了四地址格式;這樣做需要增加微程序存儲(chǔ)器的字長(zhǎng),但卻達(dá)到提高處理機(jī)性能的目的1。
指令集指令集即指令系統(tǒng),表征了計(jì)算機(jī)的基本功能。
指令系統(tǒng)是計(jì)算機(jī)硬件的語(yǔ)言系統(tǒng)。為此也叫機(jī)器語(yǔ)言、即機(jī)器語(yǔ)言程序員看到的機(jī)器的主要屬性,從這一方面說(shuō),指令系統(tǒng)是軟件和硬件的主要交界面,是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)所研究的核心內(nèi)容之一。
各計(jì)算機(jī)執(zhí)行的指令系統(tǒng)不僅決定了機(jī)器所要求的能力,而且也決定了指令的格式和機(jī)器的結(jié)構(gòu);而不同結(jié)構(gòu)的機(jī)器和不同的指令格式,應(yīng)該具有與之相匹配的指令系統(tǒng)。
計(jì)算機(jī)的運(yùn)行,就是計(jì)算機(jī)的中央處理器逐條執(zhí)行各種指令的過(guò)程。
指令格式一條指令應(yīng)包含的信息有:操作碼;源操作數(shù)地址;目的操作數(shù)地址;下一條指令地址等,這由指令格式來(lái)表現(xiàn)。
根據(jù)不同的機(jī)器,指令的格式也是多樣化的,為了使硬件能夠識(shí)別并能執(zhí)行不同類型的操作,指令必須是二進(jìn)制編碼。指令字一般為計(jì)算機(jī)的一個(gè)字長(zhǎng)度,在該字中包含操作碼、地址碼、各種特征和校驗(yàn)碼等信息。
現(xiàn)以算術(shù)運(yùn)算指令為例說(shuō)明指令格式的構(gòu)成。首先要指定機(jī)器運(yùn)算的類型是加法還是減法,其次要給出兩個(gè)做算術(shù)運(yùn)算的操作數(shù),并指出將運(yùn)算結(jié)果存放到哪里去。
指令格式可由以下兩部分信息組成:
1.操作部分
操作部分即為表示操作類型的操作碼,用OP(operation part)表示。指令的操作碼表示該指令應(yīng)進(jìn)行什么性質(zhì)的操作,如進(jìn)行加法、減法、乘法、除法、取數(shù)、存數(shù)等等。不同的指令用操作碼字段的不同編碼來(lái)表示,每一種編碼代表一種指令。
操作碼在匯編語(yǔ)言中一般是英語(yǔ)單詞或縮寫來(lái)唯一對(duì)應(yīng)其二進(jìn)制代碼,所以也叫指令記憶符或助憶符,如數(shù)據(jù)傳送指令為MOV。
設(shè)計(jì)計(jì)算機(jī)時(shí),對(duì)指令系統(tǒng)的每一條指令都要規(guī)定一個(gè)操作碼。根據(jù)已定義的這個(gè)代碼,機(jī)器經(jīng)譯碼后就能使計(jì)算機(jī)按規(guī)定操作去執(zhí)行。
指令系統(tǒng)中的指令條數(shù)或指令類型的多少取決于給出操作碼位數(shù)行的大小。常規(guī)認(rèn)為,行越大,則指令條數(shù)(2n)越多,功能越強(qiáng),指令系統(tǒng)的規(guī)模也就越大。
組成操作碼字段的位數(shù)n一般取決于計(jì)算機(jī)指令系統(tǒng)的規(guī)模。較大的指令系統(tǒng)就需要更多的位數(shù)來(lái)表示每條特定的指令。
一般來(lái)說(shuō),一個(gè)包含n位的操作碼最多能夠表示2n條指令。即:含有n條指令的指令系統(tǒng)或指令集,OP字段至少應(yīng)為位。
那么是否操作碼位數(shù)越多越好呢? 不一定。CPU 用指令寄存器IR(instructionregister)接受并表示指令。指令的長(zhǎng)度受到機(jī)器結(jié)構(gòu)的限制。機(jī)器字長(zhǎng)表示機(jī)器內(nèi)部數(shù)據(jù)通道和工作寄存器的寬度,是各種因素綜合表現(xiàn)的屬性,指令長(zhǎng)度也要適合這個(gè)要求。確定操作碼的長(zhǎng)度要考慮兩個(gè)方面:①用盡可能短的字段來(lái)表達(dá)全部指令;②硬件的實(shí)現(xiàn)盡可能簡(jiǎn)單。
兩方面都最優(yōu)是不可能的。一般涉及OP位數(shù)的指令編碼有三種情況:固定長(zhǎng)度編碼、Huffman編碼、擴(kuò)展編碼。
固定長(zhǎng)度編碼是最簡(jiǎn)單的編碼方法。其OP長(zhǎng)度固定,指令規(guī)整。硬件譯碼簡(jiǎn)單,在字長(zhǎng)較長(zhǎng)可以開支的大中型計(jì)算機(jī)及RISC(精簡(jiǎn)指令集計(jì)算機(jī))中使用。IBM-370計(jì)算機(jī)就是固定8位為OP。固定長(zhǎng)度編碼的缺點(diǎn)是浪費(fèi)位,信息冗余度大,程序加長(zhǎng)。
Huffman編碼方法中的OP是變長(zhǎng)的。這種編碼把使用頻率高的指令的OP用較少的位數(shù),使用頻率低的指令的OP用較多的位數(shù),以此縮短程序長(zhǎng)度。指令的使用頻率由使用中的典型程序進(jìn)行統(tǒng)計(jì)而得到。Huffman編碼方法的缺點(diǎn)是,由于OP位數(shù)不固定,使譯碼困難,控制器的設(shè)計(jì)復(fù)雜化。
擴(kuò)展編碼在指令長(zhǎng)度固定的情況下,OP長(zhǎng)度隨地址碼A的減少而增加。這樣可以在不加長(zhǎng)指令的情況下擴(kuò)展OP的位數(shù),使指令條數(shù)增加。擴(kuò)展編碼方法的缺點(diǎn)是增加了指令譯碼的難度。
一條指令所占有的位數(shù)稱指令字長(zhǎng)。指令字長(zhǎng)取決于OP長(zhǎng)度、D的長(zhǎng)度和D的個(gè)數(shù)。不同機(jī)器的指令字長(zhǎng)是不一樣的。
設(shè)計(jì)時(shí)要考慮:指令字長(zhǎng)是字節(jié)的倍數(shù)、OP長(zhǎng)度要覆蓋全部功能指令。
定長(zhǎng)指令結(jié)構(gòu)時(shí),OP位數(shù)固定而使地址碼受限,這時(shí)要用“尋址”方法來(lái)擴(kuò)大地址范圍;或者采用可變字長(zhǎng)指令結(jié)構(gòu)來(lái)充分利用有限的字長(zhǎng)位數(shù)。
指令格式中符號(hào)的約定以下介紹指令格式和后面指令舉例時(shí),所用符號(hào)服從以下約定:
OP:表示操作碼,即命令、操作性質(zhì),如加、政、取數(shù)、存數(shù)、移位、清零、停機(jī)等。
Di:表示地址碼,這些地址可以是內(nèi)存中的單元地址,也可以是運(yùn)算器中通用寄存器名。
Mi:主存內(nèi)存單元。
Ri:寄存器,
→或←:表示把操作(運(yùn)算)結(jié)果傳送到指定的地方。
( ):表示地址的內(nèi)容,例如,如果3表示3 號(hào)地址,那么(3) 即表示3號(hào)地址中存放的
內(nèi)容、假定內(nèi)容是A時(shí),則(3)=A。
;:在記憶符指令方式下表示對(duì)指令功能的解釋和說(shuō)明,如MOV AX,BX;AX←(BX)。
PC:指令計(jì)數(shù)器,是一種寄存器,內(nèi)裝正在執(zhí)行的指令或立即要執(zhí)行的下一條指令的地址。本寄存器有自動(dòng)加1功能,PC←(PC) + 1表示取下一條指令地址。
AC/AX:累加器。
SP(stack pointer ):堆棧指針。
操作數(shù)的地址部分地址部分除指定操作數(shù)地址和運(yùn)算結(jié)果的地址外,可按地址部分的數(shù)量多少有各種規(guī)定格式,有四地址指令格式、三地址指令格式、二地址指令格式、單地址(一地址)指令格式、零地址指今格式和多地址指令格式。
根據(jù)一條指令中有N個(gè)操作數(shù)地址,可將該指令稱為N操作數(shù)指令或N地址指令。如有3個(gè)操作數(shù)地址的指令稱為三地址指令或三操作數(shù)指令。
四地址指令格式:
|| || 表2 四地址指令格式
這里D1是第一操作數(shù)地址,D2是第二操作數(shù)地址,D3是運(yùn)算結(jié)果地址,D4是下一條指令地址。
指令功能:[D1]OP(D2)→D3(D4)=下一條指令地址( 非連續(xù)地址執(zhí)行)→PC。第一操作數(shù)地址中的內(nèi)容與第二操作數(shù)地址中的內(nèi)容進(jìn)行OP運(yùn)算,運(yùn)算結(jié)果送人第地址中去,同時(shí)指出執(zhí)行的下一條指令的地址。明顯被執(zhí)行的下一條指令的地址不是連續(xù)的2。
本詞條內(nèi)容貢獻(xiàn)者為:
李嘉騫 - 博士 - 同濟(jì)大學(xué)