《計算機組成原理》 課件 傅籬 第5-7章 輸入輸出系統(tǒng)、指令系統(tǒng)、CPU系統(tǒng)_第1頁
《計算機組成原理》 課件 傅籬 第5-7章 輸入輸出系統(tǒng)、指令系統(tǒng)、CPU系統(tǒng)_第2頁
《計算機組成原理》 課件 傅籬 第5-7章 輸入輸出系統(tǒng)、指令系統(tǒng)、CPU系統(tǒng)_第3頁
《計算機組成原理》 課件 傅籬 第5-7章 輸入輸出系統(tǒng)、指令系統(tǒng)、CPU系統(tǒng)_第4頁
《計算機組成原理》 課件 傅籬 第5-7章 輸入輸出系統(tǒng)、指令系統(tǒng)、CPU系統(tǒng)_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第5章輸入輸出系統(tǒng)5.1輸入輸出系統(tǒng)概述輸入/輸出(Input/Output,簡稱I/O)系統(tǒng)包括輸入系統(tǒng)和輸出系統(tǒng)兩個部分。輸入系統(tǒng)的作用是通過輸入設(shè)備把生活中的數(shù)據(jù)、文字、圖像、聲音、視頻等信息轉(zhuǎn)換成計算機能識別的二進制數(shù)據(jù)由計算機主機來處理。輸出系統(tǒng)的作用則是把計算機主機處理后的二進制數(shù)據(jù)通過輸出設(shè)備轉(zhuǎn)換成我們能識別的數(shù)據(jù)、文字、圖像、聲音、視頻等。

輸入/輸出設(shè)備習慣上稱為I/O設(shè)備,又稱為外部設(shè)備(簡稱外設(shè))。5.1.1輸入/輸出接口常見的輸入/輸出(I/O)設(shè)備和計算機主機的相互連接方式是:先通過輸入/輸出(I/O)接口連接到計算機系統(tǒng)總線上,然后通過總線再與計算機的主機相連接。1.輸入/輸出接口的功能(1)速度匹配:通過接口可以解決主機和I/O設(shè)備之間連接時的速度差異問題。(2)時序配合:通過接口電路可以實現(xiàn)I/O設(shè)備和主機不同時序的相互協(xié)同。(3)信息轉(zhuǎn)換:通過接口電路來解決信息轉(zhuǎn)換的問題。2.輸入/輸出接口的結(jié)構(gòu)

接口中主要部件作用如下:(1)數(shù)據(jù)寄存器數(shù)據(jù)寄存器起數(shù)據(jù)緩沖作用,作為輸入時,它保存輸入設(shè)備向CPU發(fā)送的數(shù)據(jù)(稱為數(shù)據(jù)輸入寄存器);作為輸出時,保存CPU準備向輸出設(shè)備發(fā)送的數(shù)據(jù)(稱為數(shù)據(jù)輸出寄存器)。(2)狀態(tài)寄存器狀態(tài)寄存器反映I/O設(shè)備或接口電路的工作狀態(tài),便于CPU及時了解I/O設(shè)備的工作狀態(tài),能通過查詢方式實現(xiàn)信息傳遞。(3)控制寄存器控制寄存器主要用于確定接口電路的工作方式。

(4)其他:接口電路中還有一些命令譯碼、端口地址譯碼等控制電路。3.輸入/輸出端口的編址方式(1)什么是端口I/O接口中的數(shù)據(jù)寄存器、狀態(tài)寄存器、控制寄存器又稱為端口。一個接口可以有多個端口,如數(shù)據(jù)端口對應(yīng)于數(shù)據(jù)寄存器,狀態(tài)端口對應(yīng)于狀態(tài)寄存器,命令端口對應(yīng)于控制寄存器。每個端口寄存器都有自己的地址,稱為端口地址。(2)端口的編址方式I/O端口編址方式有統(tǒng)一編址方式和獨立編址方式兩種方式。統(tǒng)一編址所謂統(tǒng)一編址,是把I/O端口地址和主機中的主存儲器(主存)的存儲單元地址一起編址。②

獨立編址獨立編址又稱為不統(tǒng)一編址。所謂獨立編址是指:把I/O設(shè)備的端口地址和主存的存儲單元地址分開單獨進行編號,這樣兩個地址空間獨立,互不影響。5.1.2輸入/輸出系統(tǒng)的數(shù)據(jù)傳送方式在現(xiàn)代計算機系統(tǒng)中,輸入/輸出系統(tǒng)的傳送方式分為四種:無條件傳送方式、查詢傳送方式、中斷傳送方式、DMA傳送方式。1.無條件傳送方式無條件傳送方式是一種最簡單的數(shù)據(jù)傳送方式,主要用于功能和工作原理比較簡單的外設(shè)。2.查詢傳送方式查詢傳送方式也稱為條件傳送方式。下圖是采取查詢方式的打印機硬件接口圖。查詢傳送方式程序流程圖。3.中斷傳送方式為了提高CPU的利用率和進行實時數(shù)據(jù)處理,CPU常采用中斷方式與外設(shè)交換數(shù)據(jù)。什么是中斷方式中斷是指CPU在執(zhí)行自己的程序(稱為主程序)時,被內(nèi)部或外部的事件打斷,轉(zhuǎn)去執(zhí)行一段事先安排好的為處理這一事件的中斷服務(wù)程序,在中斷服務(wù)程序結(jié)束后,又返回原來的斷點繼續(xù)執(zhí)行原來的程序的過程。

采用中斷的方式傳送數(shù)據(jù)稱為中斷傳送方式。中斷服務(wù)程序中斷服務(wù)程序要按照以下流程編寫:保護現(xiàn)場→中斷服務(wù)→恢復(fù)現(xiàn)場→中斷返回。采用中斷方式的打印機硬件接口圖

在硬件設(shè)計上,所有的CPU都至少會有一個以上的外部中斷請求引腳,用來接收外部中斷請求,比如8086CPU的這個引腳用INTR來標記。中斷方式的特點

優(yōu)點:利用中斷服務(wù)程序進行數(shù)據(jù)傳送,可實現(xiàn)外設(shè)和CPU并行工作,提高了CPU的工作效率。缺點:中斷管理的硬件和軟件實現(xiàn)過程十分復(fù)雜,在帶來好處的同時,硬件和軟件的設(shè)計難度更大。在大批量數(shù)據(jù)傳送時,會造成數(shù)據(jù)傳輸效率的降低。4.DMA傳送方式DMA(DirectMemoryAccess)傳送方式,也稱為直接存儲器存取方式。應(yīng)用場合DMA方式主要應(yīng)用于某種特定類型的外設(shè)和內(nèi)存進行數(shù)據(jù)傳送,這種外設(shè)在一段時間內(nèi)需要大批量和內(nèi)存交換數(shù)據(jù)。比如:硬盤。DMA方式DMA方式采取的是在主存和外設(shè)之間開辟一條專門的數(shù)據(jù)通道,這個數(shù)據(jù)通道在特殊的硬件電路——DMA控制器的控制下,直接進行數(shù)據(jù)傳送而不必通過CPU,不需要使用I/O指令進行傳送。DMA方式的工作過程DMA控制器首先要向CPU發(fā)出總線請求信號HRQ,要求CPU讓出對總線的控制權(quán)。拿到總線控制權(quán)后,DMA控制器取代CPU,臨時接管總線,控制外設(shè)和存儲器之間直接進行高速數(shù)據(jù)傳送,在結(jié)束高速數(shù)據(jù)傳送前再不需要CPU干預(yù)。外設(shè)和主存的大批量數(shù)據(jù)傳送,實際上是一個大的數(shù)據(jù)塊從一個外設(shè)搬入(讀)主存或者從主存搬入(寫)外設(shè)的過程。5.2輸入輸出設(shè)備5.2.1輸入設(shè)備1.鍵盤2.鼠標3.掃描儀4、數(shù)碼影像設(shè)備5.2.1輸出設(shè)備1.顯示器2.打印機3.繪圖儀第6章指令系統(tǒng)6.1機器指令指令:我們把指揮計算機工作的指示和命令稱為計算機指令。機器指令:CPU唯一能識別的指令,它由一連串二進制編碼組成。指令系統(tǒng):一種型號CPU能認識的全部機器指令的集合稱為這種型號CPU的指令系統(tǒng)。每種型號的CPU都只認識自己的機器指令,不同型號的CPU它的指令系統(tǒng)是不同的。用機器指令寫成的程序稱為機器語言程序。第1章里的8加12的例題,用二進制機器語言寫出的程序是:1011000000001000;數(shù)值8送到寄存器AC中0000010000001100;數(shù)值12和寄存器AC的內(nèi)容相加送到AC中二進制位數(shù)太多,書寫不方便,實際工作中,程序員常常會寫成十六進制:B0H08H;數(shù)值8送到寄存器AC中04H0CH;數(shù)值12和寄存器AC的內(nèi)容相加送到AC中機器指令記憶、閱讀都比較困難,為此,對應(yīng)某種型號的CPU,制造CPU的廠家會把它每一條機器指令都用規(guī)定的符號和格式來表示,稱為助記符。上例中的兩條機器指令分別用助記符來寫就可寫成:MOVAC,#8;數(shù)值8送到寄存器AC中ADDAC,#12;數(shù)值12和寄存器AC的內(nèi)容相加后送到AC中這種用助記符寫成的程序稱為匯編語言程序,其中的指令稱為匯編語言指令。在計算機中,匯編語言指令和機器語言指令是一一對應(yīng)的關(guān)系。MOVAC,#8對應(yīng)的機器指令為:1011000000001000ADDAC,#12對應(yīng)的機器指令為:0000010000001100需要注意的是:對于功能一樣的指令,不同CPU制造廠家規(guī)定的助記符是不同的。比如:同是把8這個數(shù)傳送到累加器AC中這條匯編語言指令,有些公司規(guī)定的助記符是:LDA#8;而另外一些公司規(guī)定的助記符是:MOVAC,#8

。6.1.1指令的一般格式指令一般來說是由操作碼和操作數(shù)兩個部分組成的,個別指令只有操作碼,沒有操作數(shù),比如暫停指令(HLT)就只有操作碼,沒有操作數(shù)。指令的一般格式分兩種表示方法。一種表示方法把指令表示成由操作碼和操作數(shù)兩部分組成的,其基本格式如下:另一種表示方法把指令表示成由操作碼和地址碼兩部分組成的,它的基本格式如下:這兩種表示方法的基本含義是一樣的,大多數(shù)教材都直接采用第二種表示方法。操作碼字段操作數(shù)字段操作碼字段地址碼字段1.操作碼操作碼是用來指出該指令所需要完成的相關(guān)操作。設(shè)計指令的操作碼可以采用固定的操作碼長度方式,也可采用變化的操作碼長度方式。(1)固定的操作碼長度方式操作碼的位數(shù)長度固定,用不同操作碼的數(shù)據(jù)組合代表不同的CPU的操作種類,也即CPU的指令條數(shù)。比如設(shè)計一個CPU的指令系統(tǒng),其指令的操作碼長度固定占用4位二進制,4位二進制共有24=16種代碼組合,則表明該指令系統(tǒng)共有24=16條指令。例如我們可以把操作碼0000代表傳送指令、0001代表加法指令、0010代表減法指令……一直到1111共16種指令,對應(yīng)16種操作。我們也可以把操作碼的長度不固定,采用變化的操作碼長度。(2)變化的操作碼長度方式我們也可以把操作碼的長度不固定,采用變化的操作碼長度,但指令系統(tǒng)的設(shè)計會困難很多,會增加指令譯碼、分析的難度,使得計算機的控制器設(shè)計復(fù)雜。例如,我們設(shè)計一個機器的指令系統(tǒng),如果指令字長是16位,其中操作碼字段OP的長度為4位,另外有3個地址字段,字長分別為4位的A1、A2、A3。如果采取把操作碼位數(shù)長度固定的方式,4位基本操作碼都采用三地址指令,則共有24=16條三地址指令。但實際機器的指令系統(tǒng)中指令對地址碼的要求是不一樣的,有些指令需要三個地址,有些指令只需要二個地址,有些指令只需要一個地址或者不需要地址碼(零地址),這樣就可以采取擴展操作碼技術(shù),這時我們可以根據(jù)設(shè)計需要來確定各種地址碼的指令數(shù)量。這樣對應(yīng)的依然是上面那種16位指令字長格式,卻可以不止16條指令。OPA1A2A3如圖6.1所示,就是采用擴展操作碼技術(shù)。如圖6.1所示,如果某種指令只需要兩個地址,就有一個地址字段的4位可以拿出來作為操作碼;如果某種指令只需要一個地址,有兩個地址共8位拿出來做為操作碼;如果某種指令零地址碼,則可以把整個16位都拿來做操作碼。這樣操作碼的位數(shù)增加,可以多出很多條指令。按照圖6.1所示的方案,我們可設(shè)計出三地址指令15條、兩地址指令15條、一地址指令15條、零地址指令16條,各種地址指令共計61條,遠遠超過固定操作碼位數(shù)長度的方式。圖6.1所示的只是一種擴展操作碼的安排方案,根據(jù)這個原理,我們可以安排出很多種擴展操作碼方案來滿足不同CPU指令系統(tǒng)的設(shè)計需要。例題6.1假設(shè)指令長度為16位,操作數(shù)的地址碼為6位,有零地址、一地址、二地址三種地址碼格式。(1)設(shè)操作碼位數(shù)長度固定,如果零地址指令有P種,一地址指令有Q種,則二地址指令有多少種?(2)如果采用擴展操作碼技術(shù),若二地址指令有X種,零地址指令有Y種,則一地址指令有多少種?解:(1)根據(jù)操作數(shù)地址碼為6位,則二地址指令中操作碼的位數(shù)為:16–6–6=4。如果操作碼位數(shù)長度固定,則4位操作碼可有24=16條指令。除去了零地址指令有P種,一地址指令有Q種,剩下的二地址指令最多有16–P–Q種。(2)采用擴展操作碼技術(shù)時,操作碼的位數(shù)可有變,則二地址時,操作碼為4位;一地址時,操作碼位數(shù)長度變成了4+6=10位;零地址時,操作碼位數(shù)長度變成了16位??梢姸刂分噶畈僮鞔a每減少一種,就可以多構(gòu)成26種一地址指令操作碼;一地址指令操作碼每減少一種,就可以多構(gòu)成26種零地址指令操作碼。因為二地址指令有X種,則一地址指令最多只有(24–X)×26

。設(shè)一地址指令有M種,則零地址指令最多有[(24–X)×26–M]×26

種。題目中給出的零地址指令為Y種,即Y=[(24–X)×26–M]×26

。

則M=(24–X)×26–Y×2-62.地址碼地址碼的地址可以是主存的地址、也可以是寄存器的地址、還可以是I/O設(shè)備的端口地址等。下面以主存地址為例,分析各種指令的地址碼字段的設(shè)計方式。地址碼的地址可以是主存的地址、也可以是寄存器的地址、還可以是I/O設(shè)備的端口地址等。下面以主存地址為例,分析各種指令的地址碼字段的設(shè)計方式。(1)四地址指令這種指令有4個地址字段。其格式如下:其中,OP代表操作碼;A1為第一操作數(shù)地址;A2為第二操作數(shù)地址;A3為操作結(jié)果地址;A4為下一條指令的地址。該指令完成(A1)OP(A2)→A3的操作。(2)三地址指令三地址指令有3個地址字段。其格式如下:三地址指令完成(A1)OP(A2)→A3的操作。OPA1A2A3A4OPA1A2A3(3)二地址指令二地址指令有二個地址字段。其格式如下:二地址指令完成(A1)OP(A2)→A1的操作,其中A1字段既代表源操作數(shù)地址,操作完成后,又代表本次操作結(jié)果地址,這樣就省去了A3。(4)一地址指令一地址指令只需要一個地址字段,其格式如下:一地址指令完成(AC)OP(A1)→AC的操作,這種設(shè)計方式中,AC寄存器既存放參與運算的操作數(shù),又存放運算的中間結(jié)果,(5)零地址指令零地址指令主要是一些控制類指令,它不需要運算,所以只有操作碼,沒有操作數(shù)。例如:空操作指令(NOP)、停機指令(HLT)、子程序返回(RET)等。OPA1A2OPA1以上討論的地址我們都是指主存地址,實際上也可在地址字段用地址碼來表示CPU中的寄存器。當一個CPU中有多個寄存器時,給每個寄存器一個編號,便可以指明源操作數(shù)和結(jié)果存放在哪個寄存器中。6.1.2指令字長一條指令所包括的二進制數(shù)位的長度稱為指令字長,如果一條指令包括了16位二進制數(shù),則表示指令字長為16位。指令字長取決于操作碼字段的長度、操作數(shù)地址碼字段的長度和操作數(shù)地址的個數(shù)。早期的計算機指令字長、機器字長、存儲字長都是相同的,這樣訪問一個存儲單元,就可以取到一條完整的指令或一個完整的數(shù)據(jù)。這種機器的指令字長是固定的,所以CPU控制方式比較簡單,設(shè)計相對容易。隨著計算機技術(shù)的發(fā)展,要求處理的數(shù)據(jù)類型增多,計算機的指令字長也發(fā)生了很大的變化。一臺機器的指令系統(tǒng)可以采取位數(shù)不同的指令,即指令字長是可變的,比如單字指令、多字指令等。6.2操作數(shù)類型和操作類型6.2.1操作數(shù)類型機器中常見的操作數(shù)類型有數(shù)據(jù)類型和地址類型。(1)數(shù)據(jù)類型如前面介紹的一樣,指令提供參與指令操作的數(shù)據(jù)一般分兩種情況。一種是在指令中直接給出了參與操作的數(shù)據(jù),這時操作數(shù)的類型就是數(shù)據(jù)類型。(2)地址類型另外一種情況是:指令格式中操作數(shù)部分不是直接指明參與運算的數(shù)據(jù),而是參與運算的操作數(shù)的主存或寄存器的地址,這時操作數(shù)的類型我們稱為地址類型。6.2.2操作類型不同CPU的指令系統(tǒng),指令的操作類型不完全相同,但大多數(shù)CPU都會提供以下幾類常用的操作指令1.數(shù)據(jù)傳送操作數(shù)據(jù)傳送類操作指令一般包括:數(shù)據(jù)和寄存器之間、寄存器和寄存器之間、寄存器和主存之間、主存單元和主存單元之間的數(shù)據(jù)傳送指令。例如:MOVAC,#8,這是一條典型的數(shù)據(jù)傳送指令,指令執(zhí)行完后,十進制數(shù)8被送入到寄存器AC中。2.算術(shù)邏輯運算操作算術(shù)邏輯運算操作指令一般包括:算術(shù)運算(加、減、乘、除、加1、減1等)和邏輯運算(與、或、非、異或等)指令。功能強大的CPU指令系統(tǒng)有些還包括浮點運算指令。例如:ADDAC,#12,這是一條加法指令,指令執(zhí)行完后,十進制數(shù)12和寄存器AC中的數(shù)據(jù)相加,結(jié)果送入到寄存器AC中3.移位運算操作移位運算操作指令包括算術(shù)移位、邏輯移位和循環(huán)移位指令三種。4.轉(zhuǎn)移操作轉(zhuǎn)移指令分為無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令,還包括子程序的調(diào)用和返回等。(1)無條件轉(zhuǎn)移無條件轉(zhuǎn)移指令是指不接受任何條件約束,可直接把程序結(jié)束順序執(zhí)行而轉(zhuǎn)移到下一條需要執(zhí)行指令的地址。例如匯編語言指令“JMPX”,其功能是將指令地址無條件轉(zhuǎn)移至X。(2)條件轉(zhuǎn)移條件轉(zhuǎn)移指令是根據(jù)當前指令執(zhí)行的結(jié)果來決定是否需要轉(zhuǎn)移。如果條件滿足,則轉(zhuǎn)移到相應(yīng)的地址去執(zhí)行指令;若條件不滿足,則繼續(xù)按順序執(zhí)行。例如匯編語言指令“BAZX”,其功能是根據(jù)累加器AC中的數(shù)據(jù)是否為0作為判斷條件,如果AC中數(shù)據(jù)為0,滿足條件,將下一條指令地址轉(zhuǎn)移至X;如果AC中的數(shù)據(jù)不為0,不滿足條件,則不發(fā)生轉(zhuǎn)移,程序順序執(zhí)行下一條指令。(3)調(diào)用與返回在編寫程序時,有些具有特定功能的程序段會反復(fù)使用,為了避免重復(fù)編寫,可將這些程序段設(shè)定為獨立的子程序,當需要執(zhí)行某子程序時,只需要調(diào)用指令即可。通常,調(diào)用指令(CALL)和返回指令(RETURN)指令配合使用。CALL指令用于從當前的程序位置轉(zhuǎn)移至子程序的入口地址;RETURN用于子程序執(zhí)行完成后重新返回到原程序的斷點。5.輸入輸出操作對于I/O端口獨立編址的計算機系統(tǒng)而言,通常設(shè)有輸入輸出指令,它完成從外設(shè)中的寄存器讀入一個數(shù)據(jù)到CPU的寄存器中,或?qū)?shù)據(jù)從CPU中的寄存器輸出到某外設(shè)的寄存器中。例如,IN指令是輸入指令,OUT指令是輸出指令。6.其他操作其他還有一些等待指令、停機指令、空操作指令、開中斷指令、關(guān)中斷指令等。功能更強大的計算機CPU指令系統(tǒng)還有字符串處理的指令、多媒體指令等。例如:HLT就是停機指令,NOP就是空操作指令。6.3尋址方式所謂尋址方式是指尋找地址的方式,這個地址包括程序中指令的地址和指令中操作數(shù)的地址。尋找指令的地址方式稱為指令尋址。尋找指令中操作數(shù)地址的尋址方式稱為數(shù)據(jù)尋址。6.3.1指令尋址指令尋址比較簡單,只有兩種情況,分別為順序?qū)ぶ泛吞S尋址。順序?qū)ぶ肥侵竿ㄟ^程序計數(shù)器PC自動加1后,形成下條指令的地址,使得程序中指令一條一條順序執(zhí)行,這就是所謂的指令順序?qū)ぶ?。跳躍尋址是指碰到轉(zhuǎn)移指令后程序會改變指令的順序執(zhí)行情況,轉(zhuǎn)為執(zhí)行無條件或滿足條件后對應(yīng)的地址位置的指令。6.3.2數(shù)據(jù)尋址數(shù)據(jù)尋址的種類很多,一條指令會在指令字中的地址碼字段中指明屬于哪種尋址方式。指令字的地址碼字段通常都不代表操作數(shù)的真實地址,我們把它稱為形式地址,記作A。操作數(shù)的真實地址稱為有效地址,記作EA,它是由尋址方式和形式地址共同來確定的。為了指明尋址方式,我們把指令格式中的地址碼字段細分為兩部分:尋址特征和形式地址。數(shù)據(jù)尋址的過程就是通過尋址特征和形式地址形成操作數(shù)的有效地址(真實地址)EA,從而找到參加指令操作的操作數(shù),完成指令功能。我們在本小節(jié)描述數(shù)據(jù)尋址方式時,一般都是采用兩地址指令,其格式如下:二地址指令完成(A1)OP(A2)→A1的操作。例如,加法指令A(yù)DDAC,#12就是一條兩地址指令。這條指令有兩個地址就有兩種尋址方式。通過后面的學習就可以知道,在這條加法指令中,第一個地址AC是屬于寄存器尋址;第二個地址#12屬于立即尋址。操作碼尋址特征形式地址AOPA1A21.立即尋址立即尋址的特點是操作數(shù)本身設(shè)計在指令字中,即形式地址A不是操作數(shù)的地址,而是操作數(shù)本身,這時候這個操作數(shù)又稱之為立即數(shù)。如圖6.2所示。圖中“#”表示立即尋址的特征標記。在ADDAC,#12這條加法指令中,操作數(shù)#12是立即尋址方式,它表示參加加法指令運算的這個操作數(shù)就是十進制數(shù)12。12前面的符號“#”是立即尋址特征標志,表示這個操作數(shù)是立即尋址方式。這條指令完成的功能就是:累加器AC中的數(shù)據(jù)加上12后結(jié)果存入累加器AC中。優(yōu)點:在于只要取出指令,便可立即獲得操作數(shù),這種指令在執(zhí)行階段不必再訪問主存儲器。缺點:A的位數(shù)限制了這類指令字中立即數(shù)的大小范圍。2.直接尋址直接尋址的特點是,指令字中的形式地址就是操作數(shù)的真實地址EA,即EA=A。如圖6.3所示。在圖6.3中尋址特征部分為空的。例如在ADDAC,12這條指令中的操作數(shù)12,前面沒有任何尋址特征,這就是直接尋址方式。直接尋址方式它的操作數(shù)是在主存中的,指令中出現(xiàn)的數(shù)據(jù)只是主存中存儲單元的地址。在直接尋址中,參與加法運算的數(shù)不是12,還是以12為地址,在主存中找到地址為12這個存儲單元,取出存儲單元中的這個數(shù)作為操作數(shù)參加指令的加法運算。直接尋址的優(yōu)點:尋找操作數(shù)比較簡單,在指令執(zhí)行階段對內(nèi)存只訪問一次。直接尋址的缺點:A的位數(shù)限制了操作數(shù)的尋址范圍,而且必須修改A的值,才能修改操作數(shù)的地址。3.隱含尋址隱含尋址是指在指令字中不明顯地給出操作數(shù)的地址,其操作數(shù)的地址隱含在操作碼或某個寄存器中。例如,上面的加法指令寫成一地址格式就是:ADD12,這種指令就只給出了一個操作數(shù)的地址,另外一個操作數(shù)隱含起來了。指令中的12是直接尋址方式,但和前面兩地址加法指令不同,另外一個操作數(shù)地址AC沒有直接在指令中指明,其實這條指令的功能也是和累加器AC中的內(nèi)容相加,但累加器AC沒有寫出來,這種方式就是隱含尋址方式。如圖6.4示意了這條隱含尋址方式指令執(zhí)行的過程。優(yōu)點:隱含尋址方式在指令中少了一個地址,因此,這種尋址方式的指令有利于縮短指令字長。4.間接尋址在間接尋址中,指令字的形式地址不直接給出操作數(shù)的地址,而是指出操作數(shù)有效地址EA所在的存儲單元地址,也就是說,有效地址EA是由形式地址間接提供的,即為即EA=(A)如圖6.5所示為一次間接尋址,即A地址單元的內(nèi)容為操作數(shù)的有效地址EA。圖中“@”

為間接尋址的特征標記。例如加法指令A(yù)DDAC,@12,這條指令中操作數(shù)@12是間接尋址方式,12前面的符號“@”是間接尋址特征標志,表示這個操作數(shù)是間接尋址方式。指令先從12為地址的存儲單元中取到一個數(shù)據(jù),再以這個數(shù)據(jù)為地址去找到實際參與加法運算的操作數(shù)。5.寄存器尋址在寄存器尋址方式中,尋址特征部分為空,地址碼字段直接給出寄存器的編號,即EA=Ri。如圖6.6所示為寄存器尋址,其操作數(shù)在由Ri所指的寄存器內(nèi)。例如,指令A(yù)DDAC,#12這條加法指令中,操作數(shù)AC就是寄存器尋址方式,它表示參與加法指令運算的這個操作數(shù)是寄存器AC中的數(shù)據(jù)?,F(xiàn)在,我們知道:ADDAC,#12指令是兩地址指令,指令中有兩個操作數(shù),所以有兩個尋址方式。前面的操作數(shù)是寄存器尋址方式(AC);后面的操作數(shù)是立即尋址方式(#12)。6.寄存器間接尋址在寄存器間接尋址方式中,尋址特征部分“@”

為間接尋址的特征標記,Ri中的內(nèi)容不是操作數(shù),而是操作數(shù)所在主存單元的地址號,即有效地址EA=(Ri)。如圖6.7所示為寄存器間接尋址的過程。例如,指令A(yù)DDAC,@R1這條加法指令中,這條指令中操作數(shù)@R1是寄存器間接尋址方式,R1前面的符號“@”是寄存器間接尋址特征標志,表示這個操作數(shù)是寄存器間接尋址方式。7.基址尋址基址尋址需要設(shè)有基址寄存器BR,其操作數(shù)的有效地址EA等于指令字中的形式地址與基址寄存器中的內(nèi)容(稱為基地址)相加,即:EA=A+(BR)。如圖6.8所示為基址尋址的過程。在指令A(yù)DDAC,BR+12這條加法指令中,操作數(shù)BR+12是基址尋址方式?;芳拇嫫鰾R是基址尋址特征標志,它表示這個操作數(shù)的存儲單元地址是基址寄存器BR中的數(shù)據(jù)加上12,指令以BR+12的結(jié)果數(shù)據(jù)為地址去主存儲器中找到實際參與加法運算的操作數(shù)?;穼ぶ穬?yōu)點:可以擴大操作數(shù)的尋址范圍,所有可以實現(xiàn)對內(nèi)存空間更大范圍的尋址。8.堆棧尋址堆棧的操作方式是“先進后出”,即堆棧是按照“先進后出”的原則依次取數(shù),最后進入堆棧的數(shù)據(jù)最先被取出,最先進入堆棧的數(shù)據(jù)最后被取出。我們以主存的一部分空間作為堆棧(軟堆棧)為例,來說明堆棧尋址的基本要求和過程。如圖6.9所示,軟堆棧需要一個特別的寄存器作為棧頂?shù)刂分甘?,這個寄存器稱為堆棧指針SP(StockPointer)。操作數(shù)只能從棧頂?shù)刂分甘镜拇鎯卧鏀?shù)或取數(shù)。在CPU指令系統(tǒng)中,有兩條專門用于堆棧尋址的指令:進棧指令PUSH和出棧指令POP。堆棧指針SP始終是指向棧頂?shù)刂返?,所以每?zhí)行一條進棧指令PUSH或一條出棧指令POP,SP的內(nèi)容都會發(fā)生變化。下面分別說明兩條指令的執(zhí)行過程。(1)進棧指令PUSHAPUSHA這條指令的功能是把累加器A(圖中ACC)內(nèi)容送入(壓入)堆棧。如圖(a)中,執(zhí)行指令前,ACC中的數(shù)據(jù)是15,堆棧指針SP的內(nèi)容是200H,表示目前堆棧的棧頂?shù)刂肥?00H。執(zhí)行這條指令的過程是:首先把SP的內(nèi)容減1,圖中是做十六進制減法,指向新的棧頂?shù)刂稴P=200H-1=1FFH,然后把ACC中的數(shù)據(jù)送入(壓入)堆棧中,也就是把ACC中的數(shù)據(jù)送入地址為1FFH的存儲單元中。當執(zhí)行完P(guān)USHA指令后,SP的值為1FFH,對應(yīng)主存地址1FFH中的值為15,ACC中的值不變?nèi)匀皇?5。(2)出棧指令POPAPOPA這條指令的功能是把堆棧中棧頂?shù)刂返臄?shù)據(jù)送入(彈出)累加器A(圖中ACC)中。如圖(b)中,執(zhí)行指令前,ACC中的數(shù)據(jù)是Y,堆棧指針SP的內(nèi)容是1FFH,表示目前堆棧的棧頂?shù)刂肥?FFH,棧頂?shù)刂穯卧臄?shù)據(jù)是15。執(zhí)行這條指令的過程是:首先把棧頂?shù)刂穯卧械臄?shù)據(jù)15送入(彈出)到累加器A(圖中ACC)中,也就是把主存地址為1FFH中的數(shù)據(jù)15送到ACC中。然后把SP的內(nèi)容加1,圖中是做十六進制加法,指向新的棧頂?shù)刂稴P=1FFH+1=200H。當執(zhí)行完P(guān)OPA指令后,SP的值為200H,ACC中的值改變成原來棧頂存儲單元中的值15。例題6.2已知基址寄存器BR中的數(shù)據(jù)為:(BR)=5;累加器AC中的數(shù)據(jù)(AC)=15;R0寄存器中的數(shù)據(jù)為(R0)=16;主存單元中的數(shù)據(jù)如圖6.10所示,每一個方格代表一個主存單元,方格內(nèi)表示主存單元存儲的數(shù)據(jù),方格旁邊是主存的地址編號,地址和方格中的數(shù)據(jù)都采用十進制?,F(xiàn)有6條加法指令如下:(1)ADDAC,#14;(2)ADDAC,14;(3)ADDAC,@14;(4)ADDAC,R0;(5)ADDAC,@R0;(6)ADDAC,BR+12;請問這6條加法指令執(zhí)行后的累加器AC中的結(jié)果是什么?解:(1)ADDAC,#14;

#14為立即尋址方式,所以參與加法運算的操作數(shù)為“#”后面的14。指令執(zhí)行前累加器AC中的數(shù)據(jù)為:(AC)=15。指令執(zhí)行后加器AC中的結(jié)果為:(AC)=(AC)+14=15+14=29。

(2)ADDAC,14;14為直接尋址方式,按照圖6.10所示,主存14號地址編號的存儲單元中的數(shù)據(jù)為:19。所以參與加法運算的操作數(shù)為19。指令執(zhí)行前累加器AC中的數(shù)據(jù)為:(AC)=15。指令執(zhí)行后加器AC中的結(jié)果為:(AC)=(AC)+19=15+19=34。圖6.10主存數(shù)據(jù)圖(3)ADDAC,@14;@14為間接尋址方式,按照圖6.10所示,主存14號地址編號的存儲單元中的數(shù)據(jù)為19,再以19作為主存地址編號找到對應(yīng)的存儲單元中數(shù)據(jù)為:28。所以參與加法運算的操作數(shù)為28。指令執(zhí)行前累加器AC中的數(shù)據(jù)為:(AC)=15。指令執(zhí)行后加器AC中的結(jié)果為:(AC)=(AC)+28=15+28=43。

(4)ADDAC,R0;R0為寄存器尋址方式,R0寄存器中的數(shù)據(jù)為:(R0)=16。所以參與加法運算的操作數(shù)為16。指令執(zhí)行前累加器AC中的數(shù)據(jù)為:(AC)=15。指令執(zhí)行后加器AC中的結(jié)果為:(AC)=(AC)+(R0)=15+16=31。

(5)ADDAC,@R0;@R0為寄存器間接尋址方式,R0寄存器中的數(shù)據(jù)為:(R0)=16。按照圖6.10所示,主存16號地址編號的存儲單元中的數(shù)據(jù)為:98。所以參與加法運算的操作數(shù)為98。指令執(zhí)行前累加器AC中的數(shù)據(jù)為:(AC)=15。指令執(zhí)行后加器AC中的結(jié)果為:(AC)=(AC)+98=15+98=113。

(6)ADDAC,BR+12BR+12是基址尋址方式?;芳拇嫫鰾R的數(shù)據(jù)為:(BR)=5,則(BR)+12=17。如圖6.10所示,主存17號地址的存儲單元中的數(shù)據(jù)為:76,所以參與加法運算的操作數(shù)為76。指令執(zhí)行前累加器AC中的數(shù)據(jù)為:(AC)=15。指令執(zhí)行后加器AC中的結(jié)果為:(AC)=(AC)+76=15+76=91。結(jié)論:尋址方式的多樣性會給程序員帶來編程的靈活性,但尋址方式太復(fù)雜,增加了程序員學習的困難,也給CPU硬件設(shè)計帶來難度。6.4RISC技術(shù)RISC即精簡指令系統(tǒng)計算機(ReducedInstructionSetComputer,縮寫RISC),與其對應(yīng)的是CISC技術(shù),即復(fù)雜指令系統(tǒng)計算機(ComplexInstructionSetComputer,縮寫CISC)6.4.1RISC的產(chǎn)生和發(fā)展在系列機的發(fā)展過程中,由于要考慮到指令系統(tǒng)的兼容,使得同一系列的計算機CPU指令系統(tǒng)越來越復(fù)雜,某些機器的指令系統(tǒng)竟包含幾百條指令、幾十種尋址方式。這類機器就稱為復(fù)雜指令系統(tǒng)計算機,簡稱為CISC。復(fù)雜指令系統(tǒng)計算機由于指令系統(tǒng)過于復(fù)雜,CPU的設(shè)計周期很長,研發(fā)資金耗費巨大。例如,Intel公司的32位CPU80386研發(fā)資金達到1.5億美金,開發(fā)周期長達三年。人們在進一步分析研究中,發(fā)現(xiàn)程序員所使用的指令存在一個規(guī)律,即典型程序中80%的語句只使用了CPU指令系統(tǒng)中20%的指令,而且這些指令都是屬于簡單指令,如取數(shù)、加、轉(zhuǎn)移等。結(jié)論是:付出巨大代價研發(fā)和增加的復(fù)雜指令只有20%的使用概率。人們從這個規(guī)律中得到啟示:能否僅僅用最常用的20%的簡單指令,重新組合出不常用的80%的指令功能呢?由此引發(fā)出了RISC技術(shù)。最早出現(xiàn)的RISCⅠ機器,僅有31條指令和兩種尋址方式,訪問存儲器的指令只有取數(shù)(LOAD)和存數(shù)(STORE)兩條指令,但它設(shè)計有128個寄存器。6.4.2RISC的主要特征計算機執(zhí)行程序所需的時間P可以用下面等式來表示:P=I×C×T其中,I是高級語言程序編譯后在機器上運行的機器指令數(shù);C為執(zhí)行每條機器指令所需的平均機器周期數(shù);T是每個機器周期的執(zhí)行時間。由于RISC指令比較簡單,用這些簡單指令編寫出來的子程序來代替CISC機器中比較復(fù)雜的指令,因此RISC中的機器指令數(shù)I比CISC多20%到40%,但RISC的大多數(shù)指令僅用一個機器周期就能完成,C的值比CISC小得多。而且RISC結(jié)構(gòu)簡單,完成一個操作所經(jīng)過的數(shù)據(jù)通路較短,使得T值也大大下降??偟恼鬯憬Y(jié)果:RISC的性能仍優(yōu)于CISC2至5倍。1.RISC的主要特點(1)選取高頻度的簡單指令以及一些很有用但又不復(fù)雜的指令,讓復(fù)雜指令的功能由頻度高的簡單指令組合來實現(xiàn)。(2)指令長度固定,指令格式少,尋址方式種類少。(3)只有取數(shù)(LOAD)和存數(shù)(STORE)指令訪問內(nèi)存,其余指令的操作都在CPU的寄存器中完成。(4)CPU中有多個通用寄存器。(5)采用流水線技術(shù),大部分指令在一個時鐘周期內(nèi)完成。采用超標量和超流水線技術(shù),可以使得每條指令的平均時間小于一個時鐘周期。(6)控制器采用組合邏輯控制,不用微程序控制。(7)采用優(yōu)化的編譯程序。2.RISC和CISC的比較與CISC機器比較,RISC機器的主要優(yōu)點可歸納如下:(1)充分利用VLSI芯片的面積CISC機器的控制器部分在CPU中所占面積為50%以上,而RISC機器控制器只占CPU芯片面積的10%左右,它可以把空出的面積用作其它用途,例如用于增加大量的通用寄存器。(2)提高計算機的運算速度RISC機器的指令數(shù)和尋址方式都很少,指令的編碼很有規(guī)律,因此RISC的指令譯碼比CISC的指令譯碼快。RISC機器內(nèi)部寄存器多,減少了訪問存儲器的次數(shù),可加快機器運行速度。RISC的指令大多數(shù)都是在一個時鐘周期內(nèi)完成,指令執(zhí)行速度快。(3)便于設(shè)計,可以降低成本,提高可靠性相比CISC機器,RISC機器的指令系統(tǒng)簡單,所以設(shè)計周期短,開發(fā)成本低。同時因為邏輯簡單,出錯的可能性小,有錯容易發(fā)現(xiàn),可靠性高。(4)有效支持高級語言程序RISC機器靠優(yōu)化編譯來更有效地支持高級語言程序。由于RISC指令少,尋址方式少,使得編譯程序容易選擇更有效的指令和尋址方式,而且由于RISC機的通用寄存器多,可盡量安排寄存器的操作,使得編譯程序的代碼優(yōu)化效率提高。隨著技術(shù)的不斷發(fā)展,RISC和CISC設(shè)計思想不斷相互融合、互相借鑒,現(xiàn)在的CPU指令系統(tǒng)很難純粹地說是RISC技術(shù)還是CISC技術(shù)。第7章CPU系統(tǒng)7.1CPU的結(jié)構(gòu)和功能本章從分析CPU的功能和內(nèi)部結(jié)構(gòu)入手,詳細討論計算機完成一條指令的全過程,以及為了進一步提高CPU數(shù)據(jù)處理能力所采取的流水線技術(shù)。歸納和總結(jié)中斷技術(shù)在提高整機系統(tǒng)效能方面的作用。

7.1.1CPU的結(jié)構(gòu)CPU是由運算器和控制器兩部分組成。不同型號的CPU根據(jù)自己的市場定位,在設(shè)計運算器和控制器的時候采用的技術(shù)是不同的,所以形成了市場上的各種不同價格、不同性能的CPU。本小節(jié)我們從最基本、最簡單的CPU結(jié)構(gòu)開始,介紹它的基本工作原理,不管多復(fù)雜的CPU,它的基本工作原理是一樣的。

圖7.1

最基本的CPU結(jié)構(gòu)圖:

圖7.1

CPU結(jié)構(gòu)圖中各個部件介紹:1.算術(shù)邏輯運算部件(ALU)ALU有兩個輸入端I1和I2,一個輸出端OUT。兩個輸入端I1和I2分別用來輸入?yún)⒓铀阈g(shù)運算和邏輯運算的數(shù)據(jù),輸出端OUT輸出運算后的結(jié)果。2.程序計數(shù)器(PC)程序計數(shù)器(PC)是CPU中最重要的部件之一,它是程序中指令能夠不斷自動執(zhí)行的關(guān)鍵。程序計數(shù)器(PC)在每執(zhí)行一條指令后,它能自動加1指向下一條指令。計算機開機后,CPU會進行上電復(fù)位,CPU上電復(fù)位的一個重要工作就是給程序計數(shù)器PC一個初值(大多數(shù)型號CPU復(fù)位后程序計數(shù)器PC的初值為0),所以,計算機中的第一條指令必須放在程序計數(shù)器PC初值對應(yīng)的主存儲器地址中,這樣計算機開機后才能找到程序員編寫好的計算機啟動程序,并按照程序員的編好的程序進行啟動計算機的各項工作。3.寄存器組不同型號的CPU它的寄存器數(shù)量是不一樣的,CPU中的寄存器的數(shù)量越多、每個寄存器能保存的二進制位數(shù)越長,CPU的性能越好,但價格也就越高。計算機的機器字長和CPU中寄存器的位數(shù)相關(guān),如果CPU中每個通用寄存器能保存16位二進制數(shù),則計算機的機器字長就是16位,我們稱之為16位機。在圖7.1中作為最基本型的CPU只有兩個通用寄存器,一個是AC,一個是BX。AC寄存器是固定連接在ALU的一個輸入端I1,AC寄存器是CPU的指令中使用最頻繁的寄存器,所以AC寄存器有一個專門的名稱:累加器(Accumulator)。兩個和主存儲器打交道的專用寄存器MAR和MDR。指令寄存器IR屬于專用寄存器4.控制部件(CU)CPU中控制器的核心部件是CU。CU的功能是接收到指令寄存器IR送來的指令,然后對指令的操作碼部分進行譯碼,找出是接收到的指令屬于什么指令,最后產(chǎn)生完成這條指令功能的一系列微操作C0、C1、……Cn5.片內(nèi)數(shù)據(jù)總線要把CPU這些通用、專用寄存器、程序計數(shù)器PC以及ALU連接在一起,需要在CPU中設(shè)計一條內(nèi)部數(shù)據(jù)總線。在圖7.1中的內(nèi)部數(shù)據(jù)總線就是起到把這些部件連接起來進行數(shù)據(jù)傳送的作用。注意:在圖7.1中,數(shù)據(jù)傳送的箭頭有單向的也有雙向的,它們分別表示數(shù)據(jù)傳送方向是單向的還是雙向的。7.1.2CPU的功能CPU是由運算器和控制器兩部分組成。在本書的第2章已經(jīng)討論了計算機內(nèi)各種運算及相應(yīng)的硬件配置,本章重點介紹控制器的功能??刂破鞯幕竟δ埽喝≈噶?、分析指令和執(zhí)行指令,同時形成下一條指令的地址。1.取指令執(zhí)行指令的第一步就是要能從主存儲器中取指令,控制器必須具備有能自動地從主存儲器中取出指令的功能。指令從內(nèi)存中取得后,放在CPU的指令寄存器IR中。計算機開機啟動程序中第一條指令的地址是由CPU復(fù)位時的程序計數(shù)器PC中的初值決定的。在執(zhí)行完當前指令后,程序計數(shù)器PC的值自動加1,形成下一條指令的地址。2.分析指令控制器必須能對從內(nèi)存中取出后存放在指令寄存器IR中的指令進行分析。指令是由操作碼和地址碼組成。所以分析指令包括兩部分內(nèi)容:第一,分析指令完成什么樣的操作,控制器發(fā)出什么樣的操作命令。這個由操作碼決定。實際就是對操作碼進行譯碼。第二,分析參加本次操作的操作數(shù)地址,即操作數(shù)的有效地址。這個由地址碼決定。實際上就是根據(jù)地址碼的尋址方式找到參加指令操作的操作數(shù)。3.執(zhí)行指令執(zhí)行指令就是根據(jù)分析該指令產(chǎn)生的“操作命令”和“操作數(shù)地址”的要求,形成該指令操作控制信號序列,通過對運算器、存儲器或者I/O設(shè)備的操作,執(zhí)行該指令。7.1.3CPU中的寄存器一個型號的CPU性能好壞寄存器的設(shè)計占有很重要的成分,現(xiàn)代CPU有多達上百個各種用途的寄存器。CPU中的寄存器大致分為兩類:一類是程序員可見的寄存器,程序員通過使用寄存器編程,可以減少訪問主存儲器的次數(shù),從而加快程序的運行速度。另外一類屬于控制類的寄存器,程序員不可以對這類的寄存器編程,它們被控制器部件使用,用于控制CPU的某種操作,我們把這類寄存器稱為程序員不可見的或者說對程序員是透明的。1.程序員可見的寄存器程序員在編寫匯編語言程序時可以使用和訪問的寄存器稱為程序員可見的寄存器。(1)通用寄存器通用寄存器可由程序員根據(jù)不同指令指定許多功能,可用于存放操作數(shù),也可以作為某種尋址方式所需的寄存器。在圖7.1中的寄存器AC、BX,以及實際型號Intel8086CPU中的AX、BX、CX、DX等都稱為通用寄存器。(2)數(shù)據(jù)寄存器數(shù)據(jù)寄存器用于存放操作數(shù),其位數(shù)應(yīng)滿足多數(shù)數(shù)據(jù)類型的數(shù)值范圍。有些機器把數(shù)據(jù)寄存器歸類于通用寄存器(例如8086CPU),也有些機器的數(shù)據(jù)寄存器只能存放數(shù)據(jù),不能存放操作數(shù)的地址,不能用于尋址方式。(3)地址寄存器地址寄存器用于存放操作數(shù)地址,滿足各種指令的尋址方式,其本身也可具有通用性,也可用于特殊的尋址方式。(4)條件碼寄存器條件碼寄存器是一個很重要的寄存器,在實際型號的CPU中,有些CPU中稱為標志寄存器、有些CPU稱為程序狀態(tài)字寄存器(PSW)。例如,執(zhí)行加法指令產(chǎn)生了進位,就會把條件碼寄存器中進位位C置位(C=1)。還有運算器做某種運算后,如果運算結(jié)果是0,則條件碼寄存器中0標志位Z就會置位(Z=1)。根據(jù)條件碼寄存器中的各種標志位的值,程序員可以了解某些指令執(zhí)行后其結(jié)果的一些狀態(tài),程序員在編寫程序時對需要的條件碼寄存器相關(guān)位進行測試,根據(jù)測試結(jié)果去決定分支程序的轉(zhuǎn)移。2.控制和狀態(tài)寄存器在一些機器里,這類寄存器對程序員來說是透明的,所謂透明是指程序員編程時不能使用但實際存在的寄存器。它在程序指令執(zhí)行過程中,幫助指令完成相應(yīng)功能。如下四種寄存器是程序員不能使用,但在指令執(zhí)行過程中起到重要作用。(1)MAR:存儲器地址寄存器,用于存放將被訪問的存儲單元的地址。(2)MDR:存儲器數(shù)據(jù)寄存器,用于存放欲寫入到主存儲器中的數(shù)據(jù)或準備從主存儲器中讀出的數(shù)據(jù)。(3)PC:程序計數(shù)器,存放現(xiàn)行指令的地址,通常具有計數(shù)功能,順序執(zhí)行程序時,每執(zhí)行完一條指令后會自動加1。當遇到轉(zhuǎn)移指令時,PC指令的值可自動修改。(4)IR:存放當前欲執(zhí)行的指令。通過這4個寄存器,CPU和主存儲器實現(xiàn)數(shù)據(jù)交換。每個公司在設(shè)計自己的CPU架構(gòu)時有各自的設(shè)計理念,其中寄存器的組織方式也不同,至于如何組織好各類寄存器,目前也無統(tǒng)一的觀點,主要有設(shè)計者自己來決定。圖7.2分別為Zilog公司設(shè)計的Z8000CPU、Intel公司設(shè)計的8086、CPU和Motorola公司設(shè)計的MC68000CPU的寄存器組織圖。圖7.2Zilog公司的Z8000、Intel公司的8086、Motorola公司的MC68000寄存器組織圖。7.2指令周期1.指令周期CPU每取出并執(zhí)行一條指令所需的全部時間稱為指令周期,即CPU完成一條指令所花的全部時間。2.不同指令的指令周期3.具有間接尋址的指令周期間接尋址方式的指令需要增加間址周期,其的整個指令周期比立即尋址和直接尋址的指令周期長。4.帶有中斷周期的指令周期CPU在每條指令結(jié)束前都要發(fā)中斷查詢信號,以檢測是否有中斷請求,如果有中斷請求,CPU就要進入中斷響應(yīng)階段,又稱為中斷周期。CPU指令系統(tǒng)中的一條最復(fù)雜指令其指令周期可能包括4個周期:取指周期、間址周期、執(zhí)行周期、中斷周期

7.3指令流水為了進一步提高計算機的運算速度,通常是從提高元器件的性能和改進系統(tǒng)的結(jié)構(gòu)、開發(fā)系統(tǒng)的并行性兩個方面入手。1.提高元器件的性能提高元器件的性能是提高計算機整機性能的重要途徑,計算機的發(fā)展歷史就是以電子元器件的發(fā)展歷程作為分代。第一代為電子管、第二代為晶體管、第三代為中小規(guī)模集成電路、第四代為大規(guī)模和超大規(guī)模集成電路。電子元器件的每一次更新?lián)Q代都使得計算機的軟硬件技術(shù)和計算機性能獲得突破性發(fā)展。特別是超大規(guī)模的集成電路出現(xiàn),使得計算機有了集成度高、體積小、功耗小、可靠性高、價格便宜等特點。但由于半導體器件的集成度已經(jīng)越來越接近物理極限,靠提高半導體元器件性能來提高計算機的性能越來越難。2.改進系統(tǒng)結(jié)構(gòu)、開發(fā)系統(tǒng)的并行性通過改變系統(tǒng)結(jié)構(gòu),開發(fā)系統(tǒng)的并行性來提升計算機系統(tǒng)的性能。并行:包含有同時性和并發(fā)性兩個方面。同時性是指兩個或多個事件在同一時刻發(fā)生,并發(fā)性是指兩個或多個事件在同一時間段發(fā)生。并行性體現(xiàn)在不同等級上。通常分為4個級別:作業(yè)級(程序級)、任務(wù)級(進程級)、指令之間級、指令內(nèi)部級。前兩級統(tǒng)稱為粗粒度(又稱為過程級);后兩級稱為細粒度(又稱為指令級)。粗粒度并行性一般通過算法(軟件的方式)來實現(xiàn),細粒度并行性一般由硬件來實現(xiàn)。本節(jié)重點討論指令流水的一些主要問題。7.3.1指令流水的原理指令流水的原理類似如工廠的生產(chǎn)裝配線,工廠生產(chǎn)裝配一個產(chǎn)品是把裝配過程分成許多步驟,同時盡可能使每一步驟的時間相同或相近,這樣形成流水線裝配過程,生產(chǎn)速度和效率大大提高。將裝配生產(chǎn)線的思想用到指令的執(zhí)行上,就引出了指令流水的概念。1.不采用指令流水技術(shù)的計算機不采用指令流水技術(shù)的計算機中,在執(zhí)行程序中一條條指令時,取指令和執(zhí)行指令是周而復(fù)始地重復(fù)出現(xiàn),各條指令按順序串行執(zhí)行。每條指令的“取指令”操作由取指令的電路部件完成,“執(zhí)行指令”的操作由執(zhí)行指令的電路部件完成。這種指令的順序執(zhí)行雖然簡單,但執(zhí)行指令過程中各個電路部件的利用率不高。2.采用指令流水的計算機不采用指令流水技術(shù)的計算機在取指令的電路部件工作時,執(zhí)行指令的電路部件基本空閑;而執(zhí)行指令的電路部件工作時,取指令的電路部件基本空閑。我們是否可以這樣設(shè)計:如果指令執(zhí)行階段不訪問主存儲器,我們利用這個時間段取下一條指令,這樣就使得取下一條指令的操作和執(zhí)行當前指令的操作同時進行。如圖7.8所示:我們稱這種為二級流水。實現(xiàn)指令的二級流水后比原來不采用指令流水的情況計算機執(zhí)行速度會提高將近一倍。3.指令流水進一步分析指令流水存在兩個方面的問題:第一,指令的“執(zhí)行時間”一般是大于“取指令時間”,因此,取指令階段可能要等待一段時間才能傳給執(zhí)行部件。第二,當遇到轉(zhuǎn)移指令時,下一條指令地址是不可知的,因為必須等到當前指令結(jié)束后才能知道轉(zhuǎn)移條件是否成立,才能決定下一條指令的地址,所以不能做到在當前指令執(zhí)行階段同時就取下一條指令。4.指令流水細分我們把指令操作細分為6個階段,稱為指令六級流水。(1)取指(FI):從存儲器取出一條指令并暫時存入指令部件的緩沖區(qū)。(2)指令譯碼(DI):確定操作性質(zhì)和操作數(shù)地址形成方式。(3)計算操作數(shù)地址(CO):按照尋址方式計算操作數(shù)的有效地址。(4)取操作數(shù)(FO):從存儲器中取操作數(shù)(若操作數(shù)在寄存器中,則無此階段)。(5)執(zhí)行指令(EI):執(zhí)行指令所需的操作,并將結(jié)果存入目的位置(寄存器中)。(6)寫操作數(shù)(WO):將結(jié)果寫入主存儲器。圖7.9指令六級流水圖。上圖中,共有9條指令依次執(zhí)行。如果不采用流水線技術(shù),9條指令執(zhí)行完成需要9*6=54個時間單元。采用流水技術(shù)后,六級流水只需要14個時間單元。大大提高了CPU的處理速度。以上為理想狀態(tài)下,不采取指令流水線和采取指令流水線的時間差異。例題7.1假設(shè)指令流水線分為取指(IF)、譯碼(ID)、執(zhí)行(EX)、回寫(WR)4個過程段,每個過程段占一個時鐘周期,共有10條指令連續(xù)輸入此流水線。(1)畫出指令周期流程。(2)畫出非指令流水線時空圖,計算非指令流水線10條指令需要的時鐘周期。(3)畫出指令流水線時空圖,計算按照四級指令流水線而言,10條指令需要的時鐘周期。解:(1)指令周期包括取指(IF)、譯碼(ID)、執(zhí)行(EX)、回寫(WR)4個過程,則指令周期流程為:→IF→ID→EX→WR。(2)非指令流水線時空圖如圖所示(圖中只畫了兩條指令I(lǐng)1、I2)。一條指令需要4個時鐘周期,非流水線處理10條指令則需要4×10=40個時鐘周期。(3)指令流水線時空圖如圖所示。一條指令需要4個時鐘周期,四級流水線處理10條指令所需要時鐘周期數(shù)為4+(10-1)=13。由此可見,指令執(zhí)行采用流水線和非流水線所需的時鐘周期數(shù)相差是很大的,所以現(xiàn)代CPU設(shè)計技術(shù)都采用流水線技術(shù)。7.3.2影響指令流水性能的因素上節(jié)對指令流水線的分析都是建立在指令流水理想化的狀態(tài)下進行的。程序中指令執(zhí)行的三種情況會影響指令流水理想化,我們稱之為三種相關(guān)。這三種相關(guān)分別是:結(jié)構(gòu)相關(guān)、數(shù)據(jù)相關(guān)、控制相關(guān)。1.結(jié)構(gòu)相關(guān)上節(jié)對指令流水線的分析都是建立在指令流水理想化的狀態(tài)下進行的。結(jié)構(gòu)相關(guān)是指:指令在重疊執(zhí)行過程中,不同指令爭用同一功能部件產(chǎn)生的資源沖突,故又稱為資源相關(guān)。計算機中指令和數(shù)據(jù)一般都是保存在同一主存儲器中,且只有一個訪問入口,如果在指令流水的某個時鐘周期內(nèi),流水線既要完成某條指令對操作數(shù)的存儲器訪問操作,又要完成另外一條指令的取指令操作,這樣就會發(fā)生訪存沖突。解決這類沖突的方法之一:讓流水線在完成前一條指令對數(shù)據(jù)的存儲器訪問時,暫停另外一條指令的取指令操作,等前一條指令訪問完存儲器后,再開始另外一條指令的取指令操作。解決這類沖突的方法之二:設(shè)置兩個物理獨立的存儲器,分別為指令存儲器和數(shù)據(jù)存儲器,這樣就可以避免取指令和取操作數(shù)同時進行時互相沖突。還有指令預(yù)取技術(shù)等也可以較好解決結(jié)構(gòu)相關(guān)的問題。2.數(shù)據(jù)相關(guān)所謂數(shù)據(jù)相關(guān)是指流水線中的各條指令因為重疊操作,可能改變對操作數(shù)的讀寫訪問順序,從而導致了數(shù)據(jù)相關(guān)沖突。假設(shè)流水線上要執(zhí)行這樣兩條三地址指令:ADDR2,R3,R1;(R2)+(R3)→R1SUBR1,R5,R4;(R1)-(R5)→R4還有指令預(yù)取技術(shù)等也可以較好解決結(jié)構(gòu)相關(guān)的問題。正常的程序執(zhí)行過程是先由ADD指令“寫”入到R1,再由SUB指令來“讀”R1。指令流水線時,由于重疊操作,使得“讀”和“寫”的先后次序有可能發(fā)生變化,也就是說,有可能在第二條SUB指令“讀”R1的時候,第一條ADD指令還沒有把數(shù)據(jù)“寫”入R1,這樣程序運行結(jié)果就會出現(xiàn)錯誤。有i和j兩條指令,其中i指令在前,j指令在后,則有可能三種不同類型的數(shù)據(jù)相關(guān):(1)寫后讀相關(guān)(ReadAfterWrite,RAW):指令j試圖在指令i寫入寄存器之前就讀出該寄存器內(nèi)容,這樣,指令j就會錯誤地讀出該寄存器舊的內(nèi)容。(2)讀后寫相關(guān)(WriteAfterRead,WAR):指令j試圖在指令i讀出寄存器內(nèi)容之前就寫入該寄存器,這樣,指令i就會錯誤地讀出該寄存器新的內(nèi)容。(3)寫后寫相關(guān)(WriteAfterWrite,WAW):指令j試圖在指令i寫入寄存器之前就寫入該寄存器,這樣,兩次寫的次序就被顛倒,使得由指令i寫入的值成為該寄存器的內(nèi)容。3.控制相關(guān)控制相關(guān)主要是由轉(zhuǎn)移指令引起的。當執(zhí)行條件轉(zhuǎn)移指令時,是否發(fā)生轉(zhuǎn)移,是需要執(zhí)行完轉(zhuǎn)移指令,根據(jù)轉(zhuǎn)移條件才能判斷是否轉(zhuǎn)移,這樣流水線由于無法判斷預(yù)測結(jié)果就會帶來性能損失。這種情況我們稱之為控制相關(guān)。7.3.3提高CPU性能的新技術(shù)流水線的多發(fā)技術(shù):在一個時鐘周期內(nèi),產(chǎn)生更多的指令結(jié)果,提高程序執(zhí)行速度。常見的多發(fā)技術(shù)有超標量技術(shù)、超流水線技術(shù)等。為了提高程序運行速度,CPU還采用了超線程技術(shù)、多核技術(shù)。1.超標量技術(shù)超標量技術(shù)是指在每個時鐘周期內(nèi)同時并發(fā)多條獨立指令,即以并行操作方式將兩條或兩條以上的指令同時編譯并執(zhí)行。如圖所示,圖中是三條指令同時執(zhí)行。例如程序段中如果有這樣三條指令:MOVBX,3ADDAX,12MOVDX,CX這三條指令是相互獨立的,不存在數(shù)據(jù)相關(guān),所以可實現(xiàn)指令級并行。如果是下面三條指令則由于存在數(shù)據(jù)相關(guān)就不能并行執(zhí)行。INCAXADDAX,BXMOVDX,AX

2.超流水線技術(shù)超流水線技術(shù)是將一些流水線寄存器插入到流水線段中,好比是將流水中的每一段再分段,如圖所示,將原來的一個時鐘周期段又分為了3段。3.超線程技術(shù)超線程是Intel公司提出的一種提高CPU性能的技術(shù)。簡單地說就是將一個物理CPU當作兩個邏

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論