1.15k likes | 1.25k Views
第五章. 指令的執行系統. 本章概要. 硬體架構 記憶體規劃 計算電路規劃 指令規劃 硬體電路的控制單元設計 中斷處理 CPU 內部電路設計探討 CPU 的效能評估 高階語言的執行 精簡與複雜指令集電腦. 指令的執行系統概論. 從一開始的 暫存器與 ALU 的硬體電路規劃 ,到 指令的種類、格式,系統的執行步驟設計 ,以及 控制單元的電路設計 ,每一個環節都涉及 CPU 整體的運作,必須仔細的做分析與探討,方能有一個完整而理想的效能 。.
E N D
第五章 指令的執行系統
本章概要 硬體架構 記憶體規劃 計算電路規劃 指令規劃 硬體電路的控制單元設計 中斷處理 CPU內部電路設計探討 CPU的效能評估 高階語言的執行 精簡與複雜指令集電腦
指令的執行系統概論 • 從一開始的暫存器與ALU的硬體電路規劃,到指令的種類、格式,系統的執行步驟設計,以及控制單元的電路設計,每一個環節都涉及CPU整體的運作,必須仔細的做分析與探討,方能有一個完整而理想的效能。
本章將從一個簡易通用暫存器型式的CPU架構,與一組基本的指令集配合,所建構的教學1號電腦,來說明記憶體的使用概念、指令的執行過程、控制單元的設計原理、組譯技術、精簡與複雜指令集電腦的差異等等設計理念。本章將從一個簡易通用暫存器型式的CPU架構,與一組基本的指令集配合,所建構的教學1號電腦,來說明記憶體的使用概念、指令的執行過程、控制單元的設計原理、組譯技術、精簡與複雜指令集電腦的差異等等設計理念。
硬體架構 通用暫存器的CPU 教學1號的規格 計算暫存器 特殊暫存器 狀態位元 ALU電路 記憶體規格 輸出入資料 中斷處理
硬體架構 • 早期CPU的設計,暫存器的數量較少,使用非常簡約,在計算上會使用專門的暫存器,來負責資料送入ALU運算,而且也用這個暫存器負責儲存ALU算出的結果,這個特殊的暫存器稱為累積器(Accumulator),這種CPU也就稱為以累積器為主的CPU。
教學1號 • 採用通用暫存器型式的CPU架構與其指令群。
教學1號 • 採用通用暫存器型式的CPU架構與其指令群。 一、計算暫存器: • 有八個一般暫存器,以暫存器檔案(Register File)方式表示,為R0至R7,每個暫存器為16位元,處理整數運算,其中R0的內容值固定為0,而R7為基底暫存器(Base Register)供系統的載入程式重排程式位址使用。
另有八個浮點暫存器,以暫存器檔案方式表示,為FR8至FR15,每個暫存器亦為16位元,處理實數運算。另有八個浮點暫存器,以暫存器檔案方式表示,為FR8至FR15,每個暫存器亦為16位元,處理實數運算。
二、特殊暫存器有: • PC(Program Counter)程式計數器,用於標示目前要執行的指令,在記憶體的位址;而PC的內部是16位元,可取得記憶體65536個空間內的指令。 • IR(Instruction Register)指令暫存器,用於從記憶體中讀取指令,並在控制單元中解碼,以得悉指令的要求;因為一個指令的格式是16個位元,所以IR暫存器也是16位元。
AR(Address Register)位址暫存器,標示所要資料在記憶體的位址,所以AR暫存器也是16位元。 • DR(Data Register)資料暫存器,讀取或寫入資料至記憶體,而AR暫存器是16位元,可以取得記憶體65536個空間內的資料。
SP(Stack Pointer)堆疊指標,用於標示目前堆疊內資料存取的記憶體位址,其為16位元。 • RP(Return Pointer)返回指標,用於標示副程式執行完成後,存取返回位址所在的記憶體位址,其為16位元。
OS(Operating System Segment Register)作業系統段暫存器,固定標示系統在記憶體的開始位址,其為16位元。 • PS(Program Segment Register)程式段暫存器,固定標示使用者程式在記憶體的開始位址,其為16位元。
SS(Stack Segment Register)堆疊段暫存器,固定標示堆疊區在記憶體的開始位址,其為16位元。 • RS(Return Address Segment Register)返回位址段暫存器,固定標示返回位址在記憶體的開始位址,其為16位元。 • RMR(Real Memory Address Register)實際記憶體位址暫存器,標示記憶體的正確位址,為32位元,所以總記憶體有4G個空間。
三、狀態位元: • SB(Program Start Bit)程式開始執行位元,當程式開始執行時SB即設定為1,直到程式執行結束時SB才設為0。 • IEN(Interrupt Enable)中斷允許位元,當有中斷要求時,若IEN為1則允許中斷服務,若IEN為0則不允許中斷服務。
ITR(Interrupt Request)中斷要求位元,若ITR為1即發生中斷要求事件,若ITR為0即沒有任何中斷要求事件。 • INT(Interrupt Flag)中斷旗號,若INT為1即表示目前正在執行中斷服務常式,INT為0即表示目前為一般程式執行。
IF(Input Flag)輸入旗號,若IF為1即表示輸入暫存器有資料進入,CPU需要讀取資料,IF為0即表示輸入暫存器內沒有資料。 • OF(Output Flag)輸出旗號,若OF為1即表示CPU送出資料至輸出暫存器等待外部裝置讀取,OF為0即表示輸出暫存器內己沒有資料。
四、ALU電路: • 算術電路有整數的加減法、遞增、遞減電路,及浮點的加減法電路,邏輯電路有NOT、AND與OR等運算電路,移位電路有左移與右移運算電路,比較電路有等於或不等於零的電路。
五、記憶體規格: • 4G*16,即容量有4*173741824個位址空間,而各位址內為16位元。
記憶體規劃 系統區 程式區 返回位址區 堆疊區 區段組合定址式 差值移位定址式 直接定址式
記憶體規劃 • 教學1號的記憶體規格是4G*16,即共有4*173741824個空間,而每個空間有16個位元;所以要指定這個記憶體的所有位址必須是32位元,而要存取任一位址內的資料則是16位元。
系統在規劃上,將記憶體分成四個區段: • 一、是系統區,由OS作業系統段暫存器所界定,其內容值固定是0000(16進制值);若要取得系統內的指令執行,可由PC程式計數器指定位址,由IR指令暫存器讀取指令;若要取得系統內資料使用,可由AR位址暫存器標示資料位址,由DR資料暫存器存取資料。
二、是程式區,由PS程式段暫存器所界定,其內容值固定是2000(16進制值);若要取得系統內的指令執行,可由PC程式計數器指定位址,由IR指令暫存器讀取指令;若要取得系統內資料使用,可由AR位址暫存器標示資料位址,由DR資料暫存器存取資料;其方式與系統區段相同,但此時SB程式開始之狀態位元是1,表示目前正在執行的是使用者程式,若SB為0則是在系統區。二、是程式區,由PS程式段暫存器所界定,其內容值固定是2000(16進制值);若要取得系統內的指令執行,可由PC程式計數器指定位址,由IR指令暫存器讀取指令;若要取得系統內資料使用,可由AR位址暫存器標示資料位址,由DR資料暫存器存取資料;其方式與系統區段相同,但此時SB程式開始之狀態位元是1,表示目前正在執行的是使用者程式,若SB為0則是在系統區。
三、是返回位址區,由RS返回位址段暫存器所界定,其內容值固定是FFFE(16進制值);本區段是用來做呼叫副程式時,儲存其返回位址,若要存取返回位址則要使用RP返回位址指標,以PC存取返回位址;這區段從FFFE:0000至FFFE:FFFF共可存65536筆返回位址,故最多可呼叫65536個副程式或中斷服務常式。三、是返回位址區,由RS返回位址段暫存器所界定,其內容值固定是FFFE(16進制值);本區段是用來做呼叫副程式時,儲存其返回位址,若要存取返回位址則要使用RP返回位址指標,以PC存取返回位址;這區段從FFFE:0000至FFFE:FFFF共可存65536筆返回位址,故最多可呼叫65536個副程式或中斷服務常式。
四、是堆疊區,由SS堆疊段暫存器所界定,其內容值固定是FFFF(16進制值);本區段是用來做資料存放,若要存取堆疊內資料則要使用SP堆疊指標,以DR存取資料;這區段從FFFF:0000至FFFF:FFFF共可存65536筆資料。四、是堆疊區,由SS堆疊段暫存器所界定,其內容值固定是FFFF(16進制值);本區段是用來做資料存放,若要存取堆疊內資料則要使用SP堆疊指標,以DR存取資料;這區段從FFFF:0000至FFFF:FFFF共可存65536筆資料。
教學1號的採固定分段設計 • 一般在記憶體的區段分配上,是由作業系統依實際的記憶體大小及要執行的程式與資料情況,做動態調整,所以每個段暫存器可由指令設定其值;但在教學1號是採固定分段設計,故將每個段暫存器設為固定值,同時沒有設計改變段暫存器的指令。
教學1號的記憶體規劃為四個區段的電路設計 • 首先是系統區,由OS系統段暫存器設定從0000開始,由程式計數器(PC值)標示指令的位址,而由IR指令暫存器讀取指令;資料讀取則由AR位址暫存器指示位址,由DR資料暫存器讀取資料 。 • 第二為程式區,由PS程式段暫存器設定從2000開始指令可由PC程式計數器指示位址,由IR指令暫存器讀取指令;資料讀寫則由AR位址暫存器配合指示位址,由DR資料暫存器負責存取資料。
第三為返回位址區,由RS返回位址段暫存器設定,位址由FFFE開始,需配合RP返回位址指標,才能正確指示記憶體位址 。 • 第四為堆疊區,由SS堆疊段暫存器設定,位址由FFFF開始,需配合SP堆疊指標,才能正確標示出記憶體位址。
記憶體管理系統 • 一般電腦的程式段位址與其內的資料是可調整的,但區段的移動變化,必須要注意區段可能造成的重疊及記憶體間隙,如果區段重疊便可能彼此破壞了內容程式或資料,區段隔離太開又會造成部份記憶體無法使用到形成浪費,所以記憶體區段的變動,必須非常仔細,通常屬系統內記憶體管理系統(Memory Management System,MMS)程式負責調配。
計算電路規劃 整數運算電路 實數運算電路 記憶體存取 輸出入資料 暫存器群
計算電路規劃 • 在教學1號的計算電路中,亦有算術、邏輯、移位與比較運算等電路;為指令的需求所以僅有簡易的加減法、遞增、遞減,邏輯的NOT、AND、OR運算,一般左右移位及是否為零的比較。
算術電路有分整數與浮點運算,暫存器也有分整數與實數(浮點)暫存器,各有8個,每個暫存器16位元,但是以暫存器檔案(記憶體架構)型態設計;由多工器選擇所指定的暫存器,進入輸入暫存器(INR1、INR2),然後透過計算電路,將結果值寫入資料暫存器(DR),而資料暫存器值可將結果值,輸入給指定暫存器或記憶體;記憶體內的資料亦可透過資料暫存器,寫給指定暫存器。算術電路有分整數與浮點運算,暫存器也有分整數與實數(浮點)暫存器,各有8個,每個暫存器16位元,但是以暫存器檔案(記憶體架構)型態設計;由多工器選擇所指定的暫存器,進入輸入暫存器(INR1、INR2),然後透過計算電路,將結果值寫入資料暫存器(DR),而資料暫存器值可將結果值,輸入給指定暫存器或記憶體;記憶體內的資料亦可透過資料暫存器,寫給指定暫存器。
指令規劃 暫存器計算指令 資料搬移指令 跳躍指令
指令規劃 • 教學1號電腦指令共有29個指令,每個指令都是16位元,可區分成暫存器計算指令、資料搬移指令及跳躍指令共三類。每一類指令先說明其指令格式,然後列出每個指令編碼、名稱及其指令動作。
暫存器計算指令 • 指令共有16個,都是以暫存器間的計算為主,前6個指令是兩個暫存器的運算ADD、SUB、FADD、FSUB、AND、OR,而後7個指令是單一暫存器動作NOT、INC、DEC、SHL、SHR、CLR、CLC,然後是中斷是否允許控制的2個指令IEN、IDE,最後是程式結束HLT。
資料搬移指令 • 指令共有8個,主要為暫存器對記憶體或外部裝置做資料存取。 • LD指令是對記憶體讀取資料,其位址是由來源暫存器Rs加上指令位址ADDR之值,而資料讀至目的暫存器Rd;ST指令是將目的暫存器Rd之值,寫入記憶體中,其位址亦是由來源暫存器Rs加上指令位址ADDR之值,這都是在程式段PS中作業。
MOV指令是將來源暫存器Rs之值,寫入目的暫存器Rd中;SET指令是將指令IR0~7之值視做常數,寫入目的暫存器Rd中。MOV指令是將來源暫存器Rs之值,寫入目的暫存器Rd中;SET指令是將指令IR0~7之值視做常數,寫入目的暫存器Rd中。 • PUSH指令是將目的暫存器之值,推入堆疊區中堆疊指標SP所指的位址中,而POP指令是將堆疊區內,堆疊指標SP所指的位址內容值取出,放入目的暫存器中,這兩個指令是在堆疊段SS中作業。
IN是輸入指令,由指令位址標示輸入埠#ADDR,從輸入埠讀取資料至目的暫存器Rd中,OUT是輸出指令,由指令位址標示輸出埠#ADDR,將目的暫存器Rd內資料,由輸出埠寫出,輸出入埠亦在程式段PS中作業。IN是輸入指令,由指令位址標示輸入埠#ADDR,從輸入埠讀取資料至目的暫存器Rd中,OUT是輸出指令,由指令位址標示輸出埠#ADDR,將目的暫存器Rd內資料,由輸出埠寫出,輸出入埠亦在程式段PS中作業。
跳躍指令 • 一般指令是依順序逐一執行的,也就是程式計數器PC逐次加1,依記憶體位址逐一讀取指令執行,若有指令執行後改變了PC之值,使得下一指令的位址有了改變,這就稱為跳躍指令,教學1號的跳躍指令共有5個。 • JP是直接跳躍指令,即下一指令位址是來源暫存器Rs加上指令位址ADDR之值。
JZ是條件跳躍指令,當目的暫存器Rd的值為零時,就要跳躍,下一指令位址是來源暫存器Rs加上指令位址ADDR之值,若不為零則條件不符,不做跳躍即不改變PC值,這個指令完成後,即做下一指令;JNZ是與JZ指令相反條件的指令,當目的暫存器Rd的值不為零時,就要跳躍,下一指令位址是來源暫存器Rs加上指令位址ADDR之值,為零時則不跳躍,這是在程式段PS中作業。JZ是條件跳躍指令,當目的暫存器Rd的值為零時,就要跳躍,下一指令位址是來源暫存器Rs加上指令位址ADDR之值,若不為零則條件不符,不做跳躍即不改變PC值,這個指令完成後,即做下一指令;JNZ是與JZ指令相反條件的指令,當目的暫存器Rd的值不為零時,就要跳躍,下一指令位址是來源暫存器Rs加上指令位址ADDR之值,為零時則不跳躍,這是在程式段PS中作業。
CALL是呼叫副程式指令,將下一指令轉至副程式開始位址執行,而副程式的開始位址是在來源暫存器Rs加上指令位址ADDR之值,同時將返回位址,依返回位址指標RP存入返回位址區段RS中;RET是返回主程式指令,是將下一指令返回至主程式,即從返回區段中返回位址指標RP所示的位址,取回返回位址放至PC中。CALL是呼叫副程式指令,將下一指令轉至副程式開始位址執行,而副程式的開始位址是在來源暫存器Rs加上指令位址ADDR之值,同時將返回位址,依返回位址指標RP存入返回位址區段RS中;RET是返回主程式指令,是將下一指令返回至主程式,即從返回區段中返回位址指標RP所示的位址,取回返回位址放至PC中。
硬體電路的控制單元設計 電腦的控制頻率 外部裝置的不同設計概念 外部裝置的大量資料傳遞 控制單元的主要電路 系統運作的指令週期 讀取與解碼指令的階段 計算指令的執行階段 計算指令的控制電路設計 資料搬移指令執行的階段 資料搬移指令的控制電路設計 跳躍指令執行的階段 副程式呼叫 跳躍指令的控制電路設計
外部裝置的不同設計概念 • 對於CPU與外部裝置的設計,在架構上可分成三種: • 裝置獨立式。 • 裝置分離式。 • 裝置隱含式(記憶體圖示式)。
裝置獨立式 • CPU與記憶體有專用的匯流排與資料讀寫控制線,而CPU與外部裝置,另有專用的匯流排與資料輸出入控制線,由於每個裝置的處理速度不同,通常有一裝置介面電路或外部裝置處理器,專門負責所有裝置的資料傳送。
這種設計的CPU可同時對記憶體與外部裝置,做資料傳送,而記憶體與外部裝置在控制上不同,所以指令也不相同,一般記憶體是用存取(LD、ST)或讀寫指令,而外部裝置是用輸入與輸出(IN,OUT)指令,裝置獨立式的問題在於CPU有記憶體的電路,又兼具裝置的電路,會使CPU電路過於繁雜而接腳過多,教學1號即用這種裝置獨立式。這種設計的CPU可同時對記憶體與外部裝置,做資料傳送,而記憶體與外部裝置在控制上不同,所以指令也不相同,一般記憶體是用存取(LD、ST)或讀寫指令,而外部裝置是用輸入與輸出(IN,OUT)指令,裝置獨立式的問題在於CPU有記憶體的電路,又兼具裝置的電路,會使CPU電路過於繁雜而接腳過多,教學1號即用這種裝置獨立式。
裝置分離式 • CPU與記憶體、外部裝置,共用相同的資料匯流排,但記憶體與裝置的選擇,及資料輸出入的控制線是不同的,由於每個裝置及記憶體的處理速度不同,通常資料的傳送會因裝置不同而影響記憶體的資料傳送。
這種設計的CPU對記憶體存取時就不能使用外部裝置,反之對裝置資料傳送時就不能記憶體存取,因為共用匯流排,但記憶體與外部裝置在控制上不同,所以指令也不相同,記憶體是用讀寫指令,而外部裝置是用輸出入指令,裝置分離式因共用匯流排,可減少CPU的接腳,CPU也只要一組暫存器對記憶體與外部裝置做資料進出。這種設計的CPU對記憶體存取時就不能使用外部裝置,反之對裝置資料傳送時就不能記憶體存取,因為共用匯流排,但記憶體與外部裝置在控制上不同,所以指令也不相同,記憶體是用讀寫指令,而外部裝置是用輸出入指令,裝置分離式因共用匯流排,可減少CPU的接腳,CPU也只要一組暫存器對記憶體與外部裝置做資料進出。