《計算機系統結構》電子教案(課2).ppt
《《計算機系統結構》電子教案(課2).ppt》由會員分享,可在線閱讀,更多相關《《計算機系統結構》電子教案(課2).ppt(45頁珍藏版)》請在裝配圖網上搜索。
1、2014.2.17,計算機系統結構,1,第2章 指令系統的設計,本章主要內容 (1) 指令操作碼的優(yōu)化(不講) (2) RISC技術簡介 (3) MIPS指令集 (4) MIPS模擬器(補充),2014.2.17,計算機系統結構,2,2.4.2 RISC技術簡介(P44),名詞:RISCReduced Instruction Set Computing,精簡指令集計算機 (1)RISC產生的背景:20%與80%規(guī)律 (2)RISC設計的基本原則: 只設置最常用的簡單指令,凡遇復雜操作均用多條簡單指令實現; 指令長度固定,操作碼與操作數長度都盡量統一; 基本指令的啟動時間間隔降低到1個時鐘周期;
2、 訪問主存只有l(wèi)oad和store指令,用變址尋址; 盡量采用硬連邏輯對指令譯碼; 為了加快執(zhí)行速度,在編譯過程中對目標代碼結構進行優(yōu)化; (3)RISC性能優(yōu)勢的原因 采用RISC技術的主要動機是使各條指令的執(zhí)行時序盡可能一致,CPU在執(zhí)行時間上可以把它們安排得更緊湊,就像許多大小相近的箱子容易被堆放得更密集一樣。這樣機器內的各種資源可以充分利用,單位時間內能執(zhí)行更多的指令,速度更快。 這方面的具體內容,在第3章講流水線時會詳細介紹。,2014.2.17,計算機系統結構,3,2.4.2 RISC技術的發(fā)展,20世紀70年代初,IBM研究中心的John Cocke證明,計算機中約20%的指令承
3、擔了80%的工作,1974年,他提出RISC的概念。 在RISC的早期研究中,加州大學伯克利分校(UC Berkeley)和斯坦福大學(Stanford)提出了許多有創(chuàng)見的新思想。伯克利率先在1982年完成了RISC I型32位芯片的設計,斯坦福大學則在John Hennessy(現任校長)帶領下于1983年完成了第一個采用RISC理念的商用MIPS微處理器。 1984年Hennessy等人創(chuàng)建了MIPS計算機公司,1998年改名為MIPS技術公司(美普思科技公司,MIPS Technologies Inc),目前是美國最著名的芯片設計公司之一。MIPS技術公司本身不生產微處理器,它只設計高性
4、能工業(yè)級的32位和64位CPU的結構體系,并且向其它半導體公司提供使用其內核(IP)的授權,用于生產基于MIPS而又各具特色的微處理器。1999年MIPS技術公司發(fā)布了MIPS32和MIPS64架構標準。 MIPS的通用微處理器主要用于構建高性能工作站、服務器和超級計算機系統,其嵌入式產品在1999年以前全球銷量第一,目前也僅次于ARM。,2014.2.17,計算機系統結構,4,MIPS處理器,MIPS的意思是“無內部互鎖流水級的微處理器”(Microprocessor without interlocked piped stages),其機制是盡量利用軟件辦法避免流水線中的數據相關問題。 M
5、IPS具有強大的應用基礎,能在MIPS上運行的操作系統,包括Linux、WindRiver、WinCE、GNU、和Monta Vista等;支持14種編譯器,包括MIPS、SDE、Green Hills、GNU和WindRiver等;支持15種調試器,包括GNU、Green Hills、WindRiver、ASHLING和FS2等;支持18種仿真工具,包括Mentor Graphics、Synopsys、CoWare和Candence等。 中國科學院計算所的龍芯1和2都采用64位MIPS指令架構。中國龍芯已與MIPS公司合作,購買其指令系統授權,以便批量生產與出口。,2014.2.17,計算機
6、系統結構,5,2.6.1 MIPS的寄存器(P47),32個64位通用寄存器(GPRs),也稱為整數寄存器 名稱是R0,R1,,R31(也可寫為$0,$1,,$31) R0的值永遠是0,可用作源寄存器,也可作為無用結果的目的寄存器; R31用于存放跳轉并鏈接類指令的返回地址。 32個64位浮點數寄存器(FPRs) F0,F1,,F31 用來存放32個單精度浮點數(32位),也可以用來存放32個雙精度浮點數(64位)。 存儲單精度浮點數(32位)時,只用到FPR的一半,其另一半沒用。 特殊功能寄存器 PC(program counter,程序計數寄存器) HI(整數乘除結果高位寄存器,除法余數)
7、 LO(整數乘除結果低位寄存器,除法的商) 它們可以與通用寄存器交換數據。 浮點狀態(tài)寄存器:用來保存有關浮點操作結果的信息。,2014.2.17,計算機系統結構,6,MIPS的寄存器別名(程序員習慣用法),MIPS編譯器支持一些專業(yè)程序員對32個通用寄存器GPR(GENERAL PURPOSE REGISTER)約定的習慣性用法(非強制的): REGISTER NAMEUSAGE $0 $zero常量0(constant value 0) $2-$3 $v0-$v1函數調用返回值(values for results and expression evaluation) $4-$7 $a0-$
8、a3函數調用參數(arguments) $8-$15 $t0-$t7暫時的(或隨便用的) $16-$23 $s0-$s7保存的(或如果用,需要SAVE/RESTORE的)(saved) $24-$25 $t8-$t9暫時的(或隨便用的) $26-$27 $k0-$k1由操作系統的異?;蛑袛嗵幚沓绦蚴褂?$28 $gp全局指針(Global Pointer) $29 $sp堆棧指針(Stack Pointer) $30 $fp幀指針(Frame Pointer) (BNN:fp is stale acutally, and can be simply used as $t8) $31 $ra返回
9、地址(return address),2014.2.17,計算機系統結構,7,2.6.2 MIPS的數據表示,整數 字節(jié)(8位) 半字(16位) 字(32位) 雙字(64位) 浮點數 單精度浮點數(32位) 雙精度浮點數(64位) 字節(jié)、半字或者字在裝入64位寄存器時,用零擴展或者用符號位擴展來填充該寄存器的剩余部分。裝入以后,對它們將按照64位整數的方式進行運算。,2014.2.17,計算機系統結構,8,2.6.3 MIPS的數據尋址方式(P47),立即數尋址與偏移量尋址; 立即數字段和偏移量字段都是16位的。 寄存器間接尋址是通過把0作為偏移量來實現的; 16位絕對尋址是通過把R0(其值永
10、遠為0)作為基址寄存器來完成的; MIPS的存儲器按字節(jié)尋址,地址為64位; 所有存儲器訪問必須是邊界對齊的,即訪問地址必須是該數據長度(字節(jié)數)的整倍數,又叫整數邊界原則; MIPS的存儲器按字節(jié)編制; 所有數據字、指令字從最高有效位開始依次標記為bit 0、1、2 ; MIPS處理器的存儲順序,可以設置為“小端字節(jié)表示順序”( Littile-Endian,低位字節(jié)放在低地址)或者“大端字節(jié)表示順序”(Big-Endian, 高位字節(jié)放在低地址,以便適合網絡數據包內順序)。在下文使用的 MIPS64模擬器中采用“小端字節(jié)表示順序”。,2014.2.17,計算機系統結構,9,2.6.4 MI
11、PS指令格式(P48),MIPS32和MIPS64體系結構定義了兼容的32位和64位處理機指令 使用條件編譯或宏匯編指令能寫出可同時在MIPS32和MIPS64上運行的程序 尋址方式編碼到操作碼中 所有的指令都是32位的 操作碼占6位 3種指令格式(3種格式中,同名字段的位置固定不變),2014.2.17,計算機系統結構,10,2.6.4 MIPS指令格式I類指令,包括所有的load和store指令,立即數指令,分支指令,寄存器跳轉指令,寄存器鏈接跳轉指令。 立即數字段為16位,用于提供立即數或偏移量。 load指令 訪存有效地址:Regsrsimmediate 從存儲器取來的數據放
12、入寄存器rt store指令 訪存有效地址:Regsrsimmediate 要存入存儲器的數據放在寄存器rt中 立即數指令 Regsrt Regsrs op immediate 分支指令 轉移目標地址:Regsrsimmediate,rt無用 寄存器跳轉、寄存器跳轉并鏈接 轉移目標地址為Regsrs,2014.2.17,計算機系統結構,11,2.6.4 MIPS指令格式R類指令,包括ALU指令,專用寄存器讀/寫指令,move指令等。 ALU指令 Regsrd Regsrs funct Regsrt funct為具體的運算操作編碼,2014.2.17,計算機系統結構,12
13、,2.6.4 MIPS指令格式J類指令,包括跳轉指令,跳轉并鏈接指令,自陷指令,異常返回指令。 在這類指令中,指令字的低26位是偏移量,它與PC值相加形成跳轉的地址。,2014.2.17,計算機系統結構,13,2.6.5 MIPS的操作(P49),MIPS指令可以分為四大類 load和store ALU操作 分支與跳轉 浮點操作 符號的意義 xny:從y傳送n位到x x,yz:把z傳送到x和y 下標:表示字段中具體的位; 對于指令和數據,按從最高位到最低位(即從左到右)的順序依次進行編號,最高位為第0位,次高位為第1位,依此類推。 下標可以是一個數字,也可以是一個范圍。 例如:RegsR40:
14、寄存器R4的符號位 RegsR456-63:R4的最低字節(jié),2014.2.17,計算機系統結構,14,2.6.5 MIPS的操作(續(xù)),Mem:表示主存; 按字節(jié)尋址,可以傳輸任意個字節(jié)。 上標:用于表示對字段進行復制的次數。 例如:032表示一個32位長的全0字段 符號##:用于兩個字段的拼接,并且可以出現在數據傳送的任何一邊。 舉例:R8、R6是64位的寄存器,下式 RegsR832-63 32(Mem RegsR60)24 ## Mem RegsR6 表示的意義是:以R6的內容作為地址訪問內存,得到的字節(jié)按符號位擴展為32位后存入R8的低32位,R8的高32位(即RegsR80-3
15、1)不變。,2014.2.17,計算機系統結構,15,load和store指令,2014.2.17,計算機系統結構,16,ALU指令,寄存器寄存器型(RR型)指令或立即數型 算術和邏輯操作:加、減、與、或、異或和移位等 R0的值永遠是0,它可以用來合成一些常用的操作。 例如:DADDIU R1,R0,#100 給寄存器R1裝入常數100 DADD R1,R0,R2 把寄存器R2中的數據傳送到寄存器R1,2014.2.17,計算機系統結構,17,2.6.6 MIPS的控制指令(P50),由一組跳轉和一組分支指令來實現控制流的改變 典型的MIPS控制指令,2014.2.17,計算機系統結構,1
16、8,跳轉指令,根據跳轉指令確定目標地址的方式不同以及跳轉時是否鏈接,可以把跳轉指令分成4種。 確定目標地址的方式 把指令中的26位偏移量左移2位(因為指令字長都是4個字節(jié))后,替換程序計數器的低28位; 間接跳轉:由指令中指定的一個寄存器來給出轉移目標地址。 跳轉的兩種類型 簡單跳轉:把目標地址送入程序計數器。 跳轉并鏈接:把目標地址送入程序計數器,把返回地址(即順序下一條指令的地址)放入寄存器R31。,2014.2.17,計算機系統結構,19,分支指令(條件轉移),分支條件由指令確定 例如:測試某個寄存器的值是否為零 提供一組比較指令,用于比較兩個寄存器的值。 例如:“置小于”指令 有的分支
17、指令可以直接判斷寄存器內容是否為負,或者比較兩個寄存器是否相等。 分支的目標地址 由16位帶符號偏移量左移兩位后和PC相加的結果來決定 一條浮點條件分支指令:通過測試浮點狀態(tài)寄存器來決定是否進行分支。,2014.2.17,計算機系統結構,20,2.6.7 MIPS的浮點操作(P51),由操作碼指出操作數是單精度(SP)或雙精度(DP) 后綴S:表示操作數是單精度浮點數 后綴D:表示是雙精度浮點數 浮點操作 包括加、減、乘、除,分別有單精度和雙精度指令。 浮點數比較指令 根據比較結果設置浮點狀態(tài)寄存器中的某一位,以便于后面的分支指令BC1T(若真則分支)或BC1F(若假則分支)測試該位,以決定是
18、否進行分支。,2014.2.17,計算機系統結構,21,注意浮點數的存儲格式只有64位雙精度這一種,沒有32位單精度數。,MIPS64偽指令,2014.2.17,計算機系統結構,22,MIPS64指令集1,2014.2.17,計算機系統結構,23,MIPS64指令集2,2014.2.17,計算機系統結構,24,MIPS64指令集3,2014.2.17,計算機系統結構,25,MIPS64指令集4,2014.2.17,計算機系統結構,26,MIPS64指令集5,2014.2.17,計算機系統結構,27,MIPS64指令集6,2014.2.17,計算機系統結構,28,MIPS64模擬器介紹1,201
19、4.2.17,計算機系統結構,29,MIPS64模擬器介紹2,2014.2.17,計算機系統結構,30,MIPS64模擬器介紹3,2014.2.17,計算機系統結構,31,MIPS64模擬器的存儲器映射I/O地址與命令,CONTROL: .word32 0 x10000;控制寄存器(映射地址) DATA: .word32 0 x10008;數據寄存器(映射地址) Set CONTROL = 1, 將DATA作為無符號整型數輸出 Set CONTROL = 2, 將DATA作為有符號整型數輸出 Set CONTROL = 3, 將DATA作為浮點數輸出 Set CONTROL = 4, 將DAT
20、A作為輸出字串的首地址 Set CONTROL = 5, 將DATA+5 作為x坐標,DATA+4作為y坐標,DATA作為RGB彩色值輸出 Set CONTROL = 6, 清除終端屏幕 Set CONTROL = 7, 清除圖形屏幕 Set CONTROL = 8, 從鍵盤讀DATA(整型數或浮點數) Set CONTROL = 9, 從DATA讀1字節(jié),無字符回顯,數據地址,0 x00000,,程序存儲器,程序起點,,lwu r24,DATA(r0),lwu r25,CONTROL(r0),指令地址,0 x00000,,,,數據存儲器,常規(guī)數據區(qū),,0 x10000,0 x10008,sd
21、 r9,0(r24),sd r2,0(r25),,,控制寄存器,數據寄存器,,,,,,,,,,,,,仿真非智能終端,2014.2.17,計算機系統結構,32,MIPS64模擬器演示實驗1 整數加法,文件名:sum.s .data A: .word 10 B: .word 8 C: .word 0 .text main: ld r4,A(r0);r4(A) ld r5,B(r0);r5(B) dadd r3,r4,r5;r3r4+r5 sd r3,C(r0);Cr3 halt,2014.2.17,計算機系統結構,33,MIPS64模擬器演示實驗2 階乘1,文件名:factorial.
22、s ; ; 階乘示例 ; 返回值放r10 ; .data number: .word 10;此數未用,可能想作為輸入值的上限 title: .asciiz “factorial program n= “;提示字符串 CONTROL: .word32 0 x10000 DATA: .word32 0 x10008 .text lwu r21,CONTROL(r0);r21指向CONTROL單元(端口) lwu r22,DATA(r0);r22指向DATA單元(端口),2014.2.17,計算機系統結構,34,MIPS64模擬器演示實驗2 階乘2,daddi r24,r0,4;輸出as
23、cii字串(提示信息) daddi r1,r0,title sd r1,(r22) sd r24,(r21) daddi r24,r0,8;從鍵盤讀輸入值到r1(整型量) sd r24,(r21) ld r1,(r22) start: daddi r29,r0,0 x80;r29指向堆棧區(qū)起點(十進制值=128) jal factorial;調階乘子程序,返回值在r10(整型量) daddi r24,r0,1;輸出r10的結果 sd r10,(r22) sd r24,(r21) halt;停機,2014.2.17,計算機系統結構,35,MIPS64模
24、擬器演示實驗2 階乘3,; ;階乘子程序,入口參數在r1,返回值在r10 ; factorial: slti r10,r1,2;如果r1<2(即r1=1)則r101,否則r100 bnez r10,out ;如果r10=1則子程序返回 sd r31,(r29);子程序返回地址壓進堆棧 daddi r29,r29,8;堆棧指針+8 sd r1,(r29);r1當前值壓進堆棧 daddi r29,r29,8;堆棧指針+8 daddi r1,r1,-1;r1r11 jal factorial;遞歸調用,將乘數序列依次入棧(n,3,2),2014.2.17,計算機系統結構,
25、36,MIPS64模擬器演示實驗2 階乘4,dadd r4,r0,r10;遞歸出口(首次r10=1),r4r10 daddi r29,r29,-8;堆棧指針8 ld r3,(r29);出棧:r3棧頂單元 dmulu r3,r3,r4;r3r3r4 dadd r10,r0,r3;r10乘積r3 daddi r29,r29,-8;堆棧指針8 ld r31,0(r29);r31返回地址 out: jr r31;子程序返回到r31所指的地址,2014.2.17,計算機系統結構,37,MIPS64模擬器演示實驗3 存儲器映射輸出,文件名:output.s .data A:.wor
26、d 10 B:.word 8 C:.word 0 CR:.word32 0 x10000 DR:.word32 0 x10008 .text main: ld r4,A(r0);r4(A) ld r5,B(r0);r5(B) dadd r3,r4,r5;r3r4+r5 sd r3,C(r0);Cr3 lwu r1,CR(r0);r1指向Control寄存器 lwu r2,DR(r0);r2指向Data寄存器 daddi r10,r0,1;準備命令1(將DATA作為無符號整型數輸出) sd r3,(r2);Data寄存器r3 sd r10,(r1);Control寄存器1 halt,2014.2
27、.17,計算機系統結構,38,MIPS64模擬器演示實驗4存儲器映射輸入/輸出,數據地址,0 x00000,,程序存儲器,程序起點,,lwu r24,DATA(r0),lwu r25,CONTROL(r0),指令地址,0 x00000,,,,數據存儲器,常規(guī)數據區(qū),,0 x10000,0 x10008,sd r9,0(r24),sd r2,0(r25),,,控制寄存器,數據寄存器,,,,,,,,,,,,,仿真非智能終端,文件名:testio.s 向虛擬終端輸出字符串(命令4)、畫線、畫彩色點(命令5)。 CONTROL: .word32 0 x10000 DATA: .word32 0 x
28、10008 .text lwu $t8,DATA($zero); $t8 = address of DATA register lwu $t9,CONTROL($zero); $t9 = address of CONTROL register daddi $v0,$zero,1; set for unsigned integer output ld $t1,int($zero) sd $t1,0($t8) ; write integer to DATA register sd $v0,0($t9) ; write
29、 to CONTROL register and make it happen daddi $v0,$zero,2; set for signed integer output ld $t1,int($zero) sd $t1,0($t8) ; write integer to DATA register sd $v0,0($t9) ; write to CONTROL register and make it happen,2014.2.17,計算機系統結構,39,習題2.14(補充,MIPS64指令系統練習),人工模擬以下MIPS程序的單條指
30、令運行方式,在表中用16進制編碼記錄每一步產生的結果(不得借助模擬軟件)。 .data n: .word 3 x: .double 0.5 .text LD R1, n(R0) L.D F0, x(R0) DADDI R2, R0, 1 ; R2 1 MTC1 R2, F11 ; F11 1 CVT.D.L F2, F11 ; F2 1 loop: MUL.D F2, F2, F0 ; F2 F2*F0 DADDI R1, R1, -1 ; decrement R1 by 1 BNEZ R1, loop ; if R10 continue HALT ; 此條不填
31、表 提示:MIPS浮點數的格式是IEEE754,2014.2.17,計算機系統結構,40,習題2.14(補充)續(xù),2014.2.17,計算機系統結構,41,實驗1:WinMIPS64模擬器練習,實驗要求:用MIPS64指令編寫一個盡可能短小的程序,將事先存放在數據區(qū)的4字節(jié)字符串(例如“3901”)轉換為一個4位BCD整數,賦給R9。在WinMIPS64模擬器調試通過。 實驗報告: (1) 程序清單; (2) 運行結果(每輪循環(huán)末尾R9的數值,高位的0可以不寫) (3) 程序效率,2014.2.17,計算機系統結構,42,IEEE 754浮點數標準(補充),目前國際上流行的浮點數標準是IEE
32、E 754,其基本組成是32bit單精度、64bit雙精度兩種類型。 IEEE 754標準的主要起草者是加州大學伯克利分校數學系教授William Kahan,他幫助Intel公司設計了8087浮點處理器(FPU),并以此為基礎形成了IEEE 754標準,Kahan教授也因此獲得了1987年的圖靈獎。目前幾乎所有包含浮點運算的處理機都宣稱支持IEEE 754標準,包括Intel公司的Pentium、中國的“龍芯”。 IEEE 754的標準文件是ANSI/IEEE Std 754-1985IEEE Standard for Binary Floating-Point Arithmetic,通
33、過Google可搜到pdf文件下載。 Kahan教授的主頁:http://www.cs.berkeley.edu/wkahan/。,2014.2.17,計算機系統結構,43,在IEEE 754浮點數國際標準中,32位單精度浮點數和64位雙精度浮點數的格式分別如下: 對于單精度浮點數,階碼用移-127碼表示,即階碼的0255分別表示階碼的真值為-127128。尾數(原碼)用1位符號位、23位小數和1位隱藏的整數共25位表示。尾數的基值和階碼的基值都是2。 當0 34、014.2.17,計算機系統結構,44,IEEE 754浮點數標準(續(xù)2),當e=255,且m0時,表示一個非數NaN(Not-a-Number)。NaN可能是在許多非確定的情況下,如零除以零、求負數的平方根等產生的結果。 當e=255,且m=0時,表示一個無窮數:N=(-1)s。注意+和-的表示是不同的。 當e=0,且m0時,表示規(guī)格化浮點數:N=(-1)s2-126(0.m)。 當e=0,且m=0時,表示浮點數零:N=(-1)s0。注意+0與-0的表示是不同的。 對于64位雙精度浮點數,階碼用移-1023碼表示,其他規(guī)定與單精度浮點數類似。,2014.2.17,計算機系統結構,45,各次作業(yè)應交的內容,作業(yè)2(第2次課),2.14(補充),實驗1,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。