版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
計算機組成與系統(tǒng)結(jié)構課后答案免費版全(清華大學出版社—袁春風主編)第1章習題答案5.若有兩個基準測試程序P1和P2在機器Ml和M2上運行,假定Ml和M2的價格分別是5000元和8000元,下表給出了P1和P2在Ml和M2上所花的時間和指令條數(shù)。程序MlM2指令條數(shù)執(zhí)行時間(ms)指令條數(shù)執(zhí)行時間(ms)P1200x10610000150xl065000P2300x1()33420x1()36請回答下列問題:對于PL哪臺機器的速度快?快多少?對于P2呢?在Ml上執(zhí)行P1和P2的速度分別是多少MIPS?在M2上的執(zhí)行速度又各是多少?從執(zhí)行速度來看,對于P2,哪臺機器的速度快?快多少?假定Ml和M2的時鐘頻率各是800MHz和1.2GHz,則在Ml和M2上執(zhí)行P1時的平均時鐘周期數(shù)CPI各是多少?如果某個用戶需要大量使用程序P1,并且該用戶主要關心系統(tǒng)的響應時間而不是吞吐率,那么,該用戶需要大批購進機器時,應該選擇Ml還是M2?為什么?(提示:從性價比上考慮)如果另一個用戶也需要購進大批機器,但該用戶使用P1和P2一樣多,主要關心的也是響應時間,那么,應該選擇Ml還是M2?為什么?參考答案:(1)對于PLM2比Ml快一倍;對于P2,Ml比M2快一倍。(2)對于MLPl的速度為:200M/10=20MIPS;P2為300k/0.003=100MIPSo對于M2,P1的速度為:150M/5=30MIPS;P2為420k/0.006=70MIPSo從執(zhí)行速度來看,對于P2,因為100/70=1.43倍,所以Ml比M2快0.43倍。(3)在Ml上執(zhí)行P1時的平均時鐘周期數(shù)CPI為:10x800M/(200x106)=40o在M2上執(zhí)行P1時的平均時鐘周期數(shù)CPI為:5xl.2G/(150xl06)=40o(4)考慮運行Pl時Ml和M2的性價比,因為該用戶主要關心系統(tǒng)的響應時間,所以性價比中的性能應考慮執(zhí)行時間,其性能為執(zhí)行時間的倒數(shù)。故性價比R為:R=l/(執(zhí)行時間x價格)R越大說明性價比越高,也即,“執(zhí)行時間x價格”的值越小,則性價比越高。因為10x5000>5x8000,所以,M2的性價比高。應選擇M2。(5)P1和P2需要同等考慮,性能有多種方式:執(zhí)行時間總和、算術平均、幾何平均。若用算術平均方式,貝!J:因為(10+0.003)/2x5000>(5+0.006)/2x8000,所以M2的性價比高,應選擇M2。若用幾何平均方式,貝!I:因為sqrt(10x0.003)x5000<sqrt(5x0.006)x8000,所以Ml的性價比高,應選擇Ml。6.若機器Ml和M2具有相同的指令集,其時鐘頻率分別為1GHz和l.5GHz。在指令集中有五種不同類型的指令A?E。下表給出了在Ml和M2上每類指令的平均時鐘周期數(shù)CPIo機器ABCDEMl12234M222456請回答下列問題:(1)Ml和M2的峰值MIPS各是多少?(2)假定某程序P的指令序列中,五類指令具有完全相同的指令條數(shù),則程序P在Ml和M2上運行時,哪臺機器更快?快多少?在Ml和M2上執(zhí)行程序P時的平均時鐘周期數(shù)CPI各是多少?參考答案:Ml上可以選擇一段都是A類指令組成的程序,其峰值MIPS為1000MIPS。M2上可以選擇一段A和B類指令組成的程序,其峰值MIPS為1500/2=750MIPS。5類指令具有完全相同的指令條數(shù),所以各占20%。在Ml和M2上執(zhí)行程序P時的平均時鐘周期數(shù)CPI分別為:Ml:20%x(l+2+2+3+4)=0.2x12=2.4M2:20%x(2+2+4+5+6)=0.2x19=3.8假設程序P的指令條數(shù)為N,則在Ml和M2上的執(zhí)行時間分別為:Ml:2.4xNxl/1G=2.4N(ns)M2:3.8xNxl/1.5G=2.53N(ns)Ml執(zhí)行P的速度更快,每條指令平均快0.13ns,也即Ml比M2快0.13/2.53x100%Q5%。(思考:如果說程序P在Ml上執(zhí)行比M2上快(3.8-2.4)/3.8x100%=36.8%,那么,這個結(jié)論顯然是錯誤的。請問錯在什么地方?)7.假設同一套指令集用不同的方法設計了兩種機器Ml和M2。機器Ml的時鐘周期為0.8ns,機器M2的時鐘周期為1.2nso某個程序P在機器Ml上運行時的CPI為4,在M2上的CPI為2。對于程序P來說,哪臺機器的執(zhí)行速度更快?快多少?參考答案:假設程序P的指令條數(shù)為N,則在Ml和M2上的執(zhí)行時間分別為:Ml:4Nx0.8=3.2N(ns)M2:2Nxl.2=2.4N(ns)所以,M2執(zhí)行P的速度更快,每條指令平均快0.8ns,比Ml快0.8/3.2x100%=25%。.假設某機器M的時鐘頻率為4GHz,用戶程序P在M上的指令條數(shù)為8xl09,其CPI為1.25,則P在M上的執(zhí)行時間是多少?若在機器M上從程序P開始啟動到執(zhí)行結(jié)束所需的時間是4秒,則P占用的CPU時間的百分比是多少?參考答案:程序P在M上的執(zhí)行時間為:L25x8xlO9xl/4G=2.5s,從啟動P執(zhí)行開始到執(zhí)行結(jié)束的總時間為4秒,其中2.5秒是P在CPU上真正的執(zhí)行時間,其他時間可能執(zhí)行操作系統(tǒng)程序或其他用戶程序。程序P占用的CPU時間的百分比為:2.5/4=62.5%o.假定某編譯器對某段高級語言程序編譯生成兩種不同的指令序列S1和S2,在時鐘頻率為500MHz的機器M上運行,目標指令序列中用到的指令類型有A、B、C和D四類。四類指令在M上的CPI和兩個指令序列所用的各類指令條數(shù)如下表所示。ABCD各指令的CPI1234S1的指令條數(shù)5221S2的指令條數(shù)1115請問:S1和S2各有多少條指令?CPI各為多少?所含的時鐘周期數(shù)各為多少?執(zhí)行時間各為多少?參考答案:S1有10條指令,CPI為(5x1+2x2+2x3+1x4)/10=19所含的時鐘周期數(shù)為10x1.9=19,執(zhí)行時間為19/500M=38ns。S2有8條指令,CPI為(1x1+1x2+1x3+5x4)/8=3.25,所含的時鐘周期數(shù)為8x3.25=26,執(zhí)行時間為26/500M=52nso(注:從上述結(jié)果來看,對于同一個高級語言源程序,在同一臺機器上所生成的目標程序不同,其執(zhí)行時間可能不同,而且,并不是指令條數(shù)少的目標程序執(zhí)行時間就一定少。).假定機器M的時鐘頻率為L2GHz,某程序P在機器M上的執(zhí)行時間為12秒鐘。對P優(yōu)化時,將其所有的乘4指令都換成了一條左移2位的指令,得到優(yōu)化后的程序曰。已知在M上乘法指令的CPI為5,左移指令的CPI為2,P的執(zhí)行時間是曰執(zhí)行時間的1.2倍,則P中有多少條乘法指令被替換成了左移指令被執(zhí)行?參考答案:顯然,P,的執(zhí)行時間為10秒,因此,P比P,多花了2秒鐘,因此,執(zhí)行時被換成左移指令的乘法指令的條數(shù)為1.2Gx2/(5-2)=8OOM0第二章習題答案3.實現(xiàn)下列各數(shù)的轉(zhuǎn)換。(25.8125)10=(?)2=(?)8=(?)16(101101.011)2=(?)10=(?)8=(?)16=(?)8421(010110010110.0011)8421=(?)10=(?)2=(?)(4E.C)16=(?)10=(?)2參考答案:(25.8125)10=(11001.1101)2=(31.64)8=(19.D)(101101.011)2=(45.375)10=(55.3)8=(2D.6)16=(01000101.001101110101)8421(3)(010110010110.0011)8421=(596.3)10=(1001010100.01001100110011...)2=(254.4CCC...)16(4E.C)16=(78.75)io=(01001110.11)2.假定機器數(shù)為8位(1位符號,7位數(shù)值),寫出下列各二進制數(shù)的原碼和補碼表示。
+0.1001,-0.1001,4-1.0,-1.0,+0.010100,-0.010100,+0,-0參考答案:+0.1001:-0.1001:+1.0:+0.1001:-0.1001:+1.0:-1.0:+0.010100:-0.010100:+0:-0:原碼0.10010001.1001000溢出溢出補碼0.10010001.0111000溢出1.00000000.01010001.01010000.00000001.00000000.01010001.10110000.00000000.0000000.假定機器數(shù)為8位(1位符號,7位數(shù)值),寫出下列各二進制數(shù)的補碼和移碼表示。+1001,-1001,+1,-1,+10100,-10100,+0,-0參考答案:移碼補碼+1001: 10001001 00001001-1001; 01110111 11110111+1: 10000001 00000001—1: 011111111 11111111
+10100: 10010100 00010100-10100: 01101100 11101100+0: 10000000 00000000-0: 10000000 000000006.已知6.已知[x]補,求x(1)[x]補=1.1100111(3)[x]補=0.1010010參考答案:[x]補=1.1100111[X]補=10000000-128[x]補=0.1010010[x]補=11010011(2)區(qū)補=10000000(4)[x]補=11010011x=-0.0011001Bx=-10000000B=x=+0.101001Bx=-101101B=-457.假定一臺32位字長的機器中帶符號整數(shù)用補碼表示,浮點數(shù)用IEEE754標準表示,寄存器R1和R2的內(nèi)容分別為RI:0000108BH,R2:8080108BH。不同指令對寄存器進行不同的操作,因而,不同指令執(zhí)行時寄存器內(nèi)容對應的真值不同。假定執(zhí)行下列運算指令時,操作數(shù)為寄存器R1和R2的內(nèi)容,則R1和R2中操作數(shù)的真值分別為多少?無符號數(shù)加法指令帶符號整數(shù)乘法指令單精度浮點數(shù)減法指令參考答案:RI=0000108BH=00000000000000000001000010001011bR2=8080108BH=10000000100000000001000010001011b(1)對于無符號數(shù)加法指令,R1和R2中是操作數(shù)的無符號數(shù)表示,因此,其真值分別為R1:108BH,R2:8080108BHo(2)對于帶符號整數(shù)乘法指令,R1和R2中是操作數(shù)的帶符號整數(shù)補碼表示,由最高位可知,R1為正數(shù),R2為負數(shù)。R1的真值為+108BH,R2的真值為一(01111111011111111110111101110100b+lb)=-7F7FEF75Ho(3)對于單精度浮點數(shù)減法指令,R1和R2中是操作數(shù)的IEEE754單精度浮點數(shù)表示。在IEEE754標準中,單精度浮點數(shù)的位數(shù)為32位,其中包含1位符號位,8位階碼,23位尾數(shù)。由R1中的內(nèi)容可知,其符號位為0,表示其為正數(shù),階碼為00000000,尾數(shù)部分為00000000001000010001011,故其為非規(guī)格化浮點數(shù),指數(shù)為-126,尾數(shù)中沒有隱藏的1,用十六進制表示尾數(shù)為+0.002U6H,故R1表示的真值為+0.002116HxW126o由R2中的內(nèi)容可知,其符號位為1,表示其為負數(shù),階碼為00000001,尾數(shù)部分為00000000001000010001011,故其為規(guī)格化浮點數(shù),指數(shù)為1-127=-126,尾數(shù)中有隱藏的1,用十六進制表示尾數(shù)為-L002116H,故R2表示的真值為-1.002116Hx104268.假定機器M的字長為32位,用補碼表示帶符號整數(shù)。下表第一列給出了在機器M上執(zhí)行的C語言程序中的關系表達式,請參照已有的表欄內(nèi)容完成表中后三欄內(nèi)容的填寫。關系表達式運算類型結(jié)果說明0==0U無符號整數(shù)100...0B=00...0B-1<0有符號整數(shù)1-(0)-1<OU無符號整數(shù)011...1B(232-l)>00...0B(0)2147483647>-2147483647-1有符號整數(shù)1O1I...1B(2J1-1)>100...OB(-2J,)2147483647U>-2147483647-1無符號整數(shù)0Oil...IB(2?1—1)<1(H)...OB(2JI)2147483647>(int)2147483648U有符號整數(shù)1Oil...IB(231—1)> OB(—231)-l>-2有符號整數(shù)1(—2)(unsigned)-1>-2無符號整數(shù)111...IB(232-1)>11...10B(232~2)9.以下是一個C語言程序,用來計算一個數(shù)組a中每個元素的和。當參數(shù)len為0時,返回值應該是0,但是在機器上執(zhí)行時,卻發(fā)生了存儲器訪問異常。請問這是什么原因造成的,并說明程序應該如何修改。floatsum_elements(floata[],unsignedlen)(inti;floatresult=0;for(i=0;i<=len-1;i++)result+=a[i];returnresult;)參考答案:參數(shù)len的類型是unsigned,所以,當len=0時,執(zhí)行l(wèi)en-1的結(jié)果為11...L是最大可表示的無符號數(shù),因而,任何無符號數(shù)都比它小,使得循環(huán)體被不斷執(zhí)行,引起數(shù)組元素的訪問越界,發(fā)生存儲器訪問異常。只要將len聲明為int型,或循環(huán)的測試條件改為i<leno.設某浮點數(shù)格式為:數(shù)符階碼尾數(shù)1位5位移碼 6位補碼其中,移碼的偏置常數(shù)為16,補碼采用一位符號位,基數(shù)為4。用這種格式表示下列十進制數(shù):+1.7,-0.12,+19,-1/8o(2)寫出該格式浮點數(shù)的表示范圍,并與12位定點補碼整數(shù)表示范圍比較。參考答案:(假定采用o舍1入法進行舍入)+1.7=+1.1011001B=O.OHOllBx41,故階碼為1+16=17=10001B,尾數(shù)為+0.0H011的補碼,BP0.011011,所以+1.7表示為010001011011o-0.12=-0.000111101B=-0.011111Bx4-1,故階碼為-1+16=15=01111B,尾數(shù)為-0.011111的補碼,即1.100001,所以一0.12表示為101111100001o+19=+10011B=O.OlOOllBx43,故階碼為3+16=19=10011B,尾數(shù)為0.010011,所以+19表示為010011010011o-1/8=-0.125=-0.001B=-0.100000x41,階碼為-1+16=15=01111B,尾數(shù)為-0.100000的補碼,即1.100000,所以-1/8表示為101111100000o(2)該格式浮點數(shù)表示的范圍如下。正數(shù)最大值:0.111111Bx411111,即:0.333x415(^230^109)正數(shù)最小值:0.000001Bx400000,即:O.0Olx4-16(弋2一34七10一10)負數(shù)最大值:—0.000001BX4°°°°°,BP:-0.001X4T6負數(shù)最小值:—1.000000BX4IIU1,即:-L000X415因此,該格式浮點數(shù)的數(shù)量級在IO」。?1()9之間。12位定點補碼整數(shù)的表示范圍為:-2”?+(2n-l),即:-2048?2047由此可見,定點數(shù)和浮點數(shù)的表示范圍相差非常大。.下列幾種情況所能表示的數(shù)的范圍是什么?16位無符號整數(shù)16位原碼定點小數(shù)16位補碼定點小數(shù)16位補碼定點整數(shù)(5)下述格式的浮點數(shù)(基數(shù)為2,移碼的偏置常數(shù)為128)數(shù)符 1位8位移碼 7位原碼參考答案:(1)無符號整數(shù):0?216—1。(2)原碼定點小數(shù):-(1-2-15)?+(1-2-15)o(3)補碼定點小數(shù):-1?+(1-2-15)0(4)補碼定點整數(shù):-32768?+32767o(5)浮點數(shù):負數(shù):-(1-2")x2+i27?_2-7*2-128。正數(shù):+2一135?(1-2-7)x2+127o.以IEEE754單精度浮點數(shù)格式表示下列十進制數(shù)。+1.75,+19,-1/8,258
參考答案:+1.75=+1.11B=1.11Bx2°,故階碼為0+127=01111111B,數(shù)符為0,尾數(shù)為1.110…0,小數(shù)點前為隱藏位,所以+1.7表示為00111111111000000000000000000000,用十六進制表示為3FE00000Ho+19=+10011B=+1.0011Bx24,故階碼為4+127=10000011B,數(shù)符為0,尾數(shù)為1.00110—0,所以+19表示為01000001100110000000000000000000,用十六進制表示為41980000Ho-1/8=-0.125=-0.001B=-1.0x2-3,階碼為-3+127=01111100B,數(shù)符為1,尾數(shù)為1.0…0,所以-1/8表示為10111110000000000000000000000000,用十六進制表示為BEOOOOOOHo258=100000010B=1.0000001Bx28,故階碼為8+127=10000111B,數(shù)符為0,尾數(shù)為1.0000001,所以258表示為01000011100000010000000000000000,用十六進制表示為43810000H。
.設一個變量的值為4098,要求分別用32位補碼整數(shù)和IEEE754單精度浮點格式表示該變量(結(jié)果用十六進制表示),并說明哪段二進制序列在兩種表示中完全相同,為什么會相同?參考答案:4098=+1000000000010B=+1.00000000001x21232位2?補碼形式為:00000000000000000001000000000010(00001002H)IEEE754單精度格式為:01000101100000000001000000000000(45801000H)粗體部分為除隱藏位外的有效數(shù)字,因此,在兩種表示中是相同的序列。.設一個變量的值為-2147483647,要求分別用32位補碼整數(shù)和IEEE754單精度浮點格式表示該變量(結(jié)果用十六進制表示),并說明哪種表示其值完全精確,哪種表示的是近似值。參考答案:-2147483647=-1111111111111111111111111111111B——L11111111111111111111111111mix23032位2?補碼形式為:10000000000000000000000000000001(80000001H)IEEE754單精度格式為:11001110111111111111111111111111(CEFFFFFFH)32位2.補碼形式能表示精確的值,而浮點數(shù)表示的是近似值,低位被截斷.下表給出了有關IEEE754浮點格式表示中一些重要數(shù)據(jù)的取值,表中已經(jīng)有最大規(guī)格化數(shù)的相應內(nèi)容,要求填入其他浮點數(shù)的相應內(nèi)容。(注:表中a代表一個在1到10之間的正純小數(shù))項目階碼尾數(shù)單精度雙精度以2的幕次表示的值以10的幕次表示的值以2的幕次表示的值以10的幕次表示的值000000000????000000011111110—.0011110111111101-11100000001?!?00(2-20)X2127aXioM(2-*)、23aXW最大規(guī)格化數(shù)000(X)0001-11最小規(guī)格化數(shù)000000000-01l.oX212*aXiowi.oX2'M2aX10-MB最大非規(guī)格化數(shù)111111110????00最小非規(guī)格化數(shù)11111111非全0(1—2“3)X2心aXi0-MaXio-^+8NaN2-23*2加=2*aXio-442T2X2"aXio7——-—.已知下列字符編碼:A=1000001,a=1100001,0=0110000,求E、e、f、7、G、Z、5的7位ACSII碼和第一位前加入奇校驗位后的8位編碼。參考答案:E的ASCII碼為W+ -,£)=1000001+100=1000101,奇校驗位P=0,第一位前加入奇校驗位后的8位編碼是0100OlOloe的ASCH碼為'a'+Ce9-aa9)=1100001+100=1100101,奇校驗位P=1,第一位前加入奇校驗位后的8位編碼是1110OlOlof的ASCII碼為‘a(chǎn)'+(f-匕,)=1100001+101=1100110,奇校驗位P=l,第一位前加入奇校驗位后的8位編碼是11100110。7的ASCII碼為'0'+(7-0)=0110000+111=ononi,奇校驗位p=o,第一位前加入奇校驗位后的8位編碼是00110111oG的ASCII碼為'A'+fG5-6A5)=1000001+0110=1000111,奇校驗位P=1,第一位前加入奇校驗位后的8位編碼是1100OllloZ的ASCII碼為'A'+(,Z,-,A,)=1000001+11001=1011010,奇校驗位P=1,第一位前加入奇校驗位后的8位編碼是11011010o5的ASCII碼為'O'+(5-O)=OilOOOO+101=Oil0101,奇校驗位P=1,第一位前加入奇校驗位后的8位編碼是10110101。17.假定在一個程序中定義了變量x、y和3其中,x和y是float型變量(用IEEE754單精度浮點數(shù)表示),i是16位short型變量(用補碼表示)。程序執(zhí)行到某一時刻,x=-0.125>y=7.5>i=100,它們都被寫到了主存(按字節(jié)編址),其地址分別是100,108和112o請分別畫出在大端機器和小端機器上變量x、y和i在內(nèi)存的存放位置。參考答案:-0.125=-0.00IB=-1.0x2.x在機器內(nèi)部的機器數(shù)為:10111110000...0(BE000000H)7.5=+111.1B=+1.111x22y在機器內(nèi)部的機器數(shù)為:01000000111100...0(40F00000H)100=64+32+4=1100100Bi在機器內(nèi)部表示的機器數(shù)為:0000000001100100(0064H)大端機
地址內(nèi)容內(nèi)容100BEH00H10100H00H10200H00H10300HBEH10840H00H109F0H00H11000HF0H11100H40H11200H64H11364H00H18.假定某計算機的總線采用奇校驗,每8位數(shù)據(jù)有一位校驗位,若在32位數(shù)據(jù)線上傳輸?shù)男畔⑹?F3CAB96H,則對應的4個校驗位應為什么?若接受方收到的數(shù)據(jù)信息和校驗位分別為873CAB96H和0101B,則說明發(fā)生了什么情況,并給出驗證過程。參考答案:傳輸信息8F3CAB96H展開為10001111001111001010101110010110,每8位有一個奇校驗位,
因此,總線上發(fā)送方送出的4個校驗位應該分別為0、1、0、lo接受方的數(shù)據(jù)信息為873CAB96H,展開后為10000111001111001010101110010110;接收到的校驗位分別為0、1、0、lo在接受方進行校驗判斷如下:根據(jù)接收到的數(shù)據(jù)信息計算出4個奇校驗位分別為1、1、0、1,將該4位校驗位分別和接收到的4位校驗位進行異或,得到1、0、0、0,說明數(shù)據(jù)信息的第一個字節(jié)發(fā)生傳輸錯誤。對照傳輸前、后的數(shù)據(jù)信息,第一字節(jié)8FH變成了87H,說明確實發(fā)生了傳輸錯誤,驗證正確。19.寫出16位數(shù)據(jù)的SEC碼。假定數(shù)據(jù)為0101000101000110,說明SEC碼如何正確檢測數(shù)據(jù)位5的錯誤。參考答案:對于16位數(shù)據(jù),可以如下插入校驗位:M16Mj5M14MsM12P5MyMjoM9MgM7M5P4M4M3M2P3MlP2Pl其中Mi是原信息數(shù)據(jù),H是加入的校驗位,對于
各個校驗位的值可以如下計算Pi=M]十M2十M3十十M5十M7十M9十Mu十Mi2十M14十M[6=1P2=M]十M3十M4十十M7十Mio十Mu十Mg十Mm=1P3=M2十M3十M4十Mg十M9十Mio十Mu十M]5十M16=0P4=M5十M6十M7十M8十M9十M10十Mu=OP5=M]2十M13十M14十M15十M16=0所以此時P5P4P3P2Pl=00011,第五位數(shù)據(jù)出錯時,數(shù)據(jù)字變?yōu)椋?101000101010110,P5P4P3P2Pl=01010,故障字=00011十01010=01001,說明碼字第9位出錯,即M5出錯。20.假設要傳送的數(shù)據(jù)信息為:100011,若約定的生成多項式為:G(x)=x3+l,則校驗碼為多少?假定在接收端接收到的數(shù)據(jù)信息為100010,說明如何正確檢測其錯誤,寫出檢測過程。參考答案:原數(shù)據(jù)信息為100011,對應的報文多項式為M(x)=x5+x+l,生成多項式的位數(shù)為4位,所以在原數(shù)據(jù)信息后面添加3個0,變?yōu)镸'(x)=x3M(x)=x8+x4+X3,用M(x)去模2除G(x),得到的余數(shù)為111,所以得到CRC碼為100011111o檢測時,用接收到的CRC碼去模2除生成多項式1001,若得到的余數(shù)為0,則表明正確,否則說明傳輸時發(fā)生了錯誤。此題中接收到的CRC碼為100010111(即數(shù)據(jù)100010加檢驗位111),顯然,用100010111模2除1001,得到余數(shù)為001,不為0,說明傳輸時發(fā)生錯誤。第3章習題答案2(4)高級語言中的運算和機器語言(即指令)中的運算是什么關系?假定某一個高級語言源程序P中有乘、除運算,但機器M中不提供乘、除運算指令,則程序P能否在機器M上運行?為什么?參考答案:(略).考慮以下C語言程序代碼:intfuncl(unsignedword)return(int)((word?24)?24);
intfunc2(unsignedword){return((int)word?24)?24;)假設在一個32位機器上執(zhí)行這些函數(shù),該機器使用二進制補碼表示帶符號整數(shù)。無符號數(shù)采用邏輯移位,帶符號整數(shù)采用算術移位。請?zhí)顚懴卤?,并說明函數(shù)fund和fund的功能。Wfuncl(w)func2(w)機器數(shù)值機器數(shù)值機器數(shù)值0000007FH1270000007FH+1270000007FH+12700000080H128()0000080H+128FFFFFF80H-128000000FFH25500(X)00FFH+255FFFFFFFFH-100000100H256()0000000H0000()OOOOH0函數(shù)fund的功能是把無符號數(shù)高24位清零(左移24位再邏輯右移24位),結(jié)果一定是正的有符號數(shù);而函數(shù)func2的功能是把無符號數(shù)的高24位都變成和第25位一樣,因為左移24位后進行算術右移,高24位補符號位(即第25位)。.填寫下表,注意對比無符號數(shù)和帶符號整數(shù)的乘法結(jié)果,以及截斷操作前、后的結(jié)果。模式Xyxxy(截斷前)xxy(截斷后)機器數(shù)值機器數(shù)值機器數(shù)值機器數(shù)值無符號數(shù)11060102001100121004二進制補碼110-2010+2111100-4100-4
無符號數(shù)00111117()0011171117二進制補碼()01+1111-1111111-1111-1無符號數(shù)11171117110001490011二進制補碼111-1111一1000001+1001+1.以下是兩段C語言代碼,函數(shù)arithQ是直接用C語言寫的,而optarith()是對arith()函數(shù)以某個確定的M和N編譯生成的機器代碼反編譯生成的。根據(jù)optarith(),可以推斷函數(shù)arith()中M和N的值各是多少?#defineM#defineNintarith(intx,inty)(intresult=0;result=x*M+y/N;returnresult;}intoptarith(intx,inty)(intt=x;x?=4;x-=t;if(y<0)y+=3;y?2;returnx+y;參考答案:可以看出x*M和"intt=x;x?=4;x-=t;v三句對應,這些語句實現(xiàn)了x乘15的功能(左移4位相當于乘以16,然后再減1),因此,M等于15;y/N與“if(yv0)y+=3;y>>2;”兩句對應,功能主要由第二句“y右移2位”實現(xiàn),它實現(xiàn)了y除以4的功能,因此N是4。而第一句“if(y〈O)y+=3;”主要用于對y=-l時進行調(diào)整,若不調(diào)整,則-而-1/4=0,兩者不等;調(diào)整后-1+3=2,2?2=0,兩者相等。思考:能否把if(y<0)y+=3;改成if(y<0)y+=2;?不能!因為y=-4時不正確。.設A,?A1和B4?Bi分別是四位加法器的兩組輸入,J為低位來的進位。當加法器分別采用串行進位和先行進位時,寫出四個進位C4?G的邏輯表達式。參考答案:串行進位:G=XQo+YiCo+Xi%C2=XzCj+YzCi+X2Y2C3=X3C2+Y3C2+X3y3C4=X4C3+Y4C3+x4y4并行進位:C產(chǎn)X1Y1+(Xi+Yi)CoC2=X2Y2+(X2+Y2)XiYi+(X2+Y2)(Xi+Yi)CoC3=X3Y3+(X3+Y3)X2Y2+(X3+Y3)(X2+Y2)XiYi+(X3+Y3)(X2+Y2)(X1+YOCoC4=X4Y4+(X4+Y4)X3Y3+(X4+Y4)(X3+Y3)X2Y2+(X4+Y4)(X3+Y3)(X2+Y2)X1Yi+(X4+Y4)(X3+Y3)(X2+Y2)(X1+Y1)Co.用SN74181和SN74182器件設計一個16位先行進位補碼加/減運算器,畫出運算器的邏輯框圖,并給出零標志、進位標志、溢出標志、符號標志的生成電路。參考答案(圖略):邏輯框圖參見教材中的圖3.15和圖3.16,將兩個圖結(jié)合起來艮呵,也即只要將圖3.15中的B輸入端的每一位用取反,得到此,和原碼此一起送到一個二路選擇器,由進位Co作為選擇控制信號。當&為1時做減法,此時,選擇將坨作為SN74181的B輸入端;否則,當Co為1時,做加法。零標志ZF、進位標志CF、溢出標志OF、符號標志SF的邏輯電路根據(jù)以下邏輯表達式畫出即可。ZF=F15+F14+F13+F12+F11+F1o+F9+F8+F7+F6+F5+F4+F3+F2+F1+F0cf=c16OF=Co(A15B15F15+A15B15F15)+Co(A15B15F”+A15B15F。SF=F15.用SN74181和SN74182器件設計一個32位的ALU,要求采用兩級先行進位結(jié)構。寫出所需的SN74181和SN74182芯片數(shù)。畫出32位ALU的邏輯結(jié)構圖。參考答案(圖略):將如圖3.15所示的兩個16位ALU級聯(lián)起來即可,級聯(lián)時,低16位ALU的高位進位C16作為高16位ALU的低位進位Co,因此,只要用8片SN74181和2片SN74182。.已知x=10,y=-6,采用6位機器數(shù)表示。請按如下要求計算,并把結(jié)果還原成真值。求[x+y]補,[x—y]補。(2)用原碼一位乘法計算[xxy]原o(3)用MBA(基4布斯)乘法計算[xxy]補。(4)用不恢復余數(shù)法計算[x/y]原的商和余數(shù)。(5)用不恢復余數(shù)法計算[x/y]補的商和余數(shù)。參考答案:[10k=001010 [-6U=111010 [6]補=000110 [10]原=001010 [—6]原=100110(1)[10+(-6)]補=[10]補+[-6]補=001010+111010=000100(+4)口0—(—6)]補=[10]補+[-(-6)]補=001010+000110=010000(+16)(2)先采用無符號數(shù)乘法計算001010X000110的乘積,原碼一位乘法過程(前面兩個0省略)如下:CPY說明000000110Po=O +0000 y4=0,+00 -01000 C,P和Y同時右移一位|0 0000 0011得P1+1010 V尸1,0 1-p10 C,P和Y同時右移一位|0 0101 0001得P2 +1010 y2= 1,+X-0 1111 0000 C,P和Y同時右移一位o oilli 1000 得P3 +0000 yi =0,+00 0ini1 c,p和y同時右移一位0 0011 1100得P4若兩個6位數(shù)相乘的話,則還要右移兩次,得000000111100符號位為:0?l=l,因此,[XxY]原=100000111100BPXxY=-111100B=-60(3)[-10]^=110110,布斯乘法過程如下:說明oo|o000 1110100設y.i=o,[P。]補二。y0y.]=00,P、*直接右移一位000000 011101得[PJ補000000 011101得[PJ補 1 110 1100411010 11 010011100110 001001010011 000100001001111110010100011011yiyo=io,+[—X]補110110P、Y同4右移一位
M4-M-4 得0]補 4- 0 0y2yl=01,+[X]補0soP、Y同時右移一位000010得0]補+110110y3y2=10,+[—X]補1口1P、Y同時右移一批111100得[P4]補 4—000000y4y3=11,+oiinip、y同時右移一位|111110得[P5]補+000000
11000010011 11 1100001001P、Y同時右移一位111111得冷]補因此,[XxY]補=1111HOOOIOO,BPXXY=-111100B=-60(4)因為除法計算是2n位數(shù)除n位數(shù),所以[6]原=0110,[10]原=00001010,[—6]補=1010,商的符號位:0,1=1,運算過程(前面兩個0省略)如下:余數(shù)寄存器R余數(shù)/商寄存器Q說ooo(rloio開始r0=x+1010~~I R1=X-Y一1010 10100 R1<0,貝!Jq4二0,沒有溢出01 0100 2R1(R和Q同時左移,蚩出一位商)+0110 Rz=2Ri+Y1011 01000 R2<0,貝!Jq3=0 oilooo2r2(r和Q同時左移,占出一位商)+6110 r3=2R2+Y1100 10000 r3<0,貝!Iq2=0 lOOf0000 2R3(R和Q同時左移,空出一位商)+0110 r3=2R2+Y1111 00000 r4<0,貝!Iqi=0 liltf 0000 2R4(R和Q同時左移,空出一位商)+0110 R5=2R4+Y0100 00001 r5>0,則q0=1商的數(shù)值部分為:00001。所以,[X/Y]原=00001(最高位為符號位),余數(shù)為0100。(5)將10和-6分別表示成補碼形式為:[10]補=01010,[-6]補=11010,計算過程如下:先對被除數(shù)進行符號擴展,[10]補=0000001010,[6]補=00110余數(shù)寄,器R余數(shù)/商寄存器Q說明I 00000 01010 開始Ro=[X] +11010 R1=[X]+[Y]
11010 01010同號,貝!11010 0101010100~~10101和Q同時左移,生出一位上商1)+00110TOC\o"1-5"\h\z2Rx+[-Y]11010 10101同號,則q4=l, 10101 01011(R和Q同時左移,空出一位上商1)+ 001R3=2R2+[-Y]11011 01011同號,貝!Iq3=110110 10111(R和Q同時左朝空出一位上商1)+001102R3+[-Y]11100 10111同號,貝!Iq2=1110011 01111和Q同時左移,空出一位上商0)+001102R4+[-Y]muoim同號,則qi=1,1i11o11111Ri與[丫]2Ri(RRiRi與[丫]2Ri(RRi=R2與[丫]2R21 0R3與[Y]2R3R4=R4與[丫]2R4(RR5二R5與[Y]2R5+00110 r6=2R5+[-Y]00100 11110 R6與[Y]異號,則qo=O,Q左移,空出一位上商1+00000 + 1 商為負數(shù),末位加1;余數(shù)不需要修正00100 11111所以,[X/Y]補=11111,余數(shù)為00100。即:XAr=-0001B=-l,余數(shù)為0100B=4將各數(shù)代入公式“除數(shù)x商+余數(shù)=被除數(shù)”進行驗證,得:(-6)x(-1)+4=10o.若一次加法需要1ns,一次移位需要0.5nso請分別計算用一位乘法、兩位乘法、基于CRA的陣列乘法、基于CSA的陣列乘法四種方式計算兩個8位無符號二進制數(shù)乘積時所需的時間。參考答案:一位乘法:8次右移,8次加法,共計12ns;二位乘法:4次右移,4次加法,共計6ns;基于CRA的陣列乘法:每一級部分積不僅依賴于上一級部分積,還依賴于上一級最終的進位,而每一級進位又是串行進行的,所以最長的路徑總共經(jīng)過了8+2x(8-1)=22次全加器,共計約22ns;
基于CSA的陣列乘法:本級進位和本級和同時傳送到下一級,同級部分積之間不相互依賴,只進行O(N)次加法運算,因此,共計約8nso.在IEEE754浮點數(shù)運算中,當結(jié)果的尾數(shù)出現(xiàn)什么形式時需要進行左規(guī),什么形式時需要進行右規(guī)?如何進行左規(guī),如何進行右規(guī)?參考答案:(1)對于結(jié)果為土1X.XX……X的情況,需要進行右規(guī)。右規(guī)時,尾數(shù)右移一位,階碼加lo右規(guī)操作可以表示為:Mb<-Mbx2\Eb<-Eb+lo右規(guī)時注意以下兩點:a)尾數(shù)右移時,最高位“1”被移到小數(shù)點前一位作為隱藏位,最后一位移出時,要考慮舍入。b)階碼加1時,直接在末位加1。(2)對于結(jié)果為±0.00……Olx……x的情況,需要進行左規(guī)。左規(guī)時,數(shù)值位逐次左移,階碼逐次減1,直到將第一位“1”移到小數(shù)點左邊。假定k為結(jié)果中“土”和左邊第一個1之間連續(xù)0的個數(shù),則左規(guī)操作可以表示為:Mb<-Mbx2k,Eb^Eb-ko左規(guī)時注意以下兩點:a)尾數(shù)左移時數(shù)值部分最左k個0被移出,因此,
相對來說,小數(shù)點右移了k位。因為進行尾數(shù)相加時,默認小數(shù)點位置在第一個數(shù)值位(即:隱藏位)之后,所以小數(shù)點右移k位后被移到了第一位1后面,這個1就是隱藏位。b)執(zhí)行Eb-Eb-k時,每次都在末位減L一共減k次。.在IEEE754浮點數(shù)運算中,如何判斷浮點運算的結(jié)果是否溢出?參考答案:浮點運算結(jié)果是否溢出,并不以尾數(shù)溢出來判斷,而主要看階碼是否溢出。尾數(shù)溢出時,可通過右規(guī)操作進行糾正。階碼上溢時,說明結(jié)果的數(shù)值太大,無法表示;階碼下溢時,說明結(jié)果數(shù)值太小,可以把結(jié)果近似為Oo在進行對階、規(guī)格化、舍入和浮點數(shù)的乘/除運算等過程中,都需要對階碼進行加、減運算,可能會發(fā)生階碼上溢或階碼下溢,因此,必須對階碼進行溢出判斷。(有關對階碼進行溢出判斷的方法可參見教材中相關章節(jié)。)
.假設浮點數(shù)格式為:階碼是4位移碼,偏置常數(shù)為8,尾數(shù)是6位補碼(采用雙符號位),用浮點運算規(guī)則分別計算在不采用任何附加位和采用2位附加位(保護位、舍入位)兩種情況下的值。(假定對階和右規(guī)時采用就近舍入到偶數(shù)方式)(15/16)x27+(2/16)x25 (2)(15/16)x27-(2/16)x25(3)(15/16)x25+(2/16)x27 (4)(15/16)x25-(2/16)x27參考答案(假定采用隱藏位):X=(15/16)x27=0.111100Bx27=(1.111000)2x26Yl=(2/16)x25=0.001000Bx25=(1.000000)2x22Y2=(-2/16)x25=-0.001000Bx25=(-1.000000)2x22K=(15/16)x25=0.111100Bx25=(1.111000)2x24Jl=(2/16)x27=0.001000Bx27=(1.000000)2x24J2=(-2/16)x27=-0.001000Bx27=(-1.000000)2x24根據(jù)題目所給的各種位數(shù),可以得到在機器中表示為:[X]浮=001110(1)111000 [Y1]浮=001010(1)000000[Y2]浮=111010(1)000000
[K]浮=001100(1)111000[JI]浮=001100(1)000000[J2]浮=111100(1)000000所以,Ex=1110,Mx=00(1).111000,Eyi=1010,My=00(1).000000,Ey2=1010,My=11(1).000000Ek=1100,Mk=00(1).111000,En=1100,Mji=00(1).000000,Ej2=1100,Mj2=11(1).000000尾數(shù)M中小數(shù)點前面有三位,前兩位為數(shù)符,表示雙符號,第三位加了括號,是隱藏位“1”。沒有附加位時的計算:X+Y1[△均補=[EJ移+[-[Eyj移]補(mod2n)=1110+0110=0100AE=4,根據(jù)對階規(guī)則可知需要對yl進行對階,結(jié)果為:Eyl=Ex=1110,Myi=000.000100尾數(shù)相加:Mb=Mx+Myl=001.111000+000.000100=001.111100,兩位符號相等,數(shù)值部分最高位為1,不需要進行規(guī)格化,所以最后結(jié)果為:E=llio,M=00(l).111100,Bp(31/32)x27(2)X+Y2[△6補=[EJ移+HE丫力移]補(mod2n)=1110+0110=0100;△E=4,根據(jù)對階規(guī)則可知需要對y2進行對
階,結(jié)果為:Ey2=Ex=1110,My2=111.111100尾數(shù)相加:Mb=Mx+My2=001.111000+111.111100=001.110100,兩位符號相等,數(shù)值部分最高為1,不需要進行規(guī)格化,所以最后結(jié)果為:E=1110,M=00(l).110100,BP(29/32)x27K+Jl[AE]補=[E4移+[-[Eji]移]補(mod2n)=1100+0100=0000;AE=0,根據(jù)對階規(guī)則可知不需要進行對階。尾數(shù)相加:Mb=Mk+Mji=001.111000+001.000000=010.111000,兩位符號不等,說明尾數(shù)溢出,需要進行右規(guī),最后結(jié)果為:E=110LM=00(l).011100,即(23/32)x26K+J2[AE]補=[E內(nèi)移+[-[EJ?]移]補(mod2n)=1100+0100=0000;AE=0,根據(jù)對階規(guī)則可知不需要進行對階。尾數(shù)相加:Mb=Mk+Mj2=001.111000+111.000000=000.111000,兩位符號相等,數(shù)值部分最高位為0,需要進行左規(guī),所以最后結(jié)果為:E=1011,M=00(l).110000,BP(7/8)x24如果有兩位附加位精度上會有提高,在對階的
時候要注意小數(shù)點后就不是6位,而是8位,最后兩位為保護位和舍入位。但是由于本題6位尾數(shù)已經(jīng)足夠,再加2位附加位,其結(jié)果是一樣的。14.采用IEEE754單精度浮點數(shù)格式計算下列表達式的值。(1)0.75+(-65.25) (2)0.75—(—65.25)參考答案:x=0.75=0.110...0B=(1.10...0)2x21y=-65.25=-1000001.01000...0B=(-1.00000101...0)2X26用IEEE754標準單精度格式表示為:[x]浮=0 01111110 10...0 [y]浮=110000101000001010...0所以,Ex=01111110,Mx=0(1).1...0,Ey=10000101,My=1(1).OOOOO1O1O...O尾數(shù)Mx和My中小數(shù)點前面有兩位,第一位為數(shù)符,第二位加了括號,是隱藏位“1”。以下是計算機中進行浮點數(shù)加減運算的過程(假定保留2位附加位:保護位和舍入位)(1)0.75+(-65.25)①對階:[AE]補=[EJ移+[-[E/移]補(mod2n)=0111mo+0111ion=nillooiAE=-7,根據(jù)對階規(guī)則可知需要對x進行對階,結(jié)果為:Ex=Ey=10000101,Mx=00.000000110...000x的尾數(shù)Mx右移7位,符號不變,數(shù)值高位補0,隱藏位右移到小數(shù)點后面,最后移出的2位保留②尾數(shù)相加:Mb=Mx+My=oO.000000110...000+11.000001010...000(注意小數(shù)點在隱藏位后)根據(jù)原碼加/減法運算規(guī)則,得:00.000000110...000+ 11.000001010...000 =11.000000100...000上式尾數(shù)中最左邊第一位是符號位,其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(加粗)。③規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為1,所以不需要進行規(guī)格化。④舍入:把結(jié)果的尾數(shù)Mb中最后兩位附加位舍入掉,從本例來看,不管采用什么舍入法,結(jié)果都一樣,都是把最后兩個0去掉,得:Mb=11.000000100...0⑤溢出判斷:在上述階碼計算和調(diào)整過程中,沒有發(fā)生“階碼上溢”和“階碼下溢”的問題。
因此,階碼Eb=10000101。最后結(jié)果為Eb=10000101,Mb=1(1).00000010...0,BP:-64.5o(2)0.75-(-65.25)對階:[AE]補=[EJ移+[-[EJ移]補(mod2n)=01111110+01111011=11111001AE=-7,根據(jù)對階規(guī)則可知需要對x進行對階,結(jié)果為:Ex=Ey=10000110,Mx=00.000000110...000x的尾數(shù)Mx右移一位,符號不變,數(shù)值高位補0,隱藏位右移到小數(shù)點后面,最后移出的位保留尾數(shù)相加:Mb=Mx-My=oO.000000110...000-11.000001010...000(注意小數(shù)點在隱藏位后)根據(jù)原碼加/減法運算規(guī)則,得:00.000000110...000 -11.000001010...000=01.00001000...000上式尾數(shù)中最左邊第一位是符號位,其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(加粗)。③規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為1,不需要進行規(guī)格化。④舍入:把結(jié)果的尾數(shù)Mb中最后兩位附加位舍入掉,從本例來看,不管采用什么舍入法,結(jié)果都一樣,都是把最后兩個0去掉,得:Mb
=01.00001000...0⑤溢出判斷:在上述階碼計算和調(diào)整過程中,沒有發(fā)生“階碼上溢”和“階碼下溢”的問題。因此,階碼Eb=10000101。最后結(jié)果為Eb=10000101,Mb=0(1).00001000...0,即:+66o思考題:對階時發(fā)生什么情況,就可以不再繼續(xù)進行計算?15.假定十進制數(shù)用8421NBCD碼表示,采用十進制加法運算計算下列表達式的值,并討論在十進制BCD碼加法運算中如何判斷溢出。(1)234+567 (2)548+729參考答案:234+567001000110100+010101100111011110011011V+ 011001111010000101100000
100000000001結(jié)果為:100000000001結(jié)果為:(801)1。548+7290000010101001000+00000111001010010000110001110001+00000110000001100001001001110111結(jié)果為:(1277)10在第(2)題中,如果是采用12位數(shù)表示加數(shù)548和729,則能看出最后得到的答案是110001110111,這時就是BCD碼加法溢出了。所以我們在判斷的時候不能僅僅看BCD碼最高位是不是丟失,而要看結(jié)果的最高4位是不是大于9,如果大于9,就可以認為是溢出了。16.假定十進制數(shù)用8421NBCD碼表示,十進制運算673-356可以采用673加上(-356)的模10補碼實現(xiàn)。畫出實現(xiàn)上述操作的3位十進制數(shù)的BCD碼減法運算線路,列出線路中所有的輸入變量和輸出變量。參考答案:[-(356)io]補=011001000100
011001110011+011001000100110010110111電0110OHO0000001100010111最高位產(chǎn)生進位,因此,結(jié)果為正數(shù):001100010111,故結(jié)果為:(+317)10電路圖分為兩部分,一個是求出模10補碼,另一個是計算以及判斷輸出結(jié)果的電路圖(參見教材圖3.33)o求模10補碼的電路圖(RTL級)如下:計算電路圖(RTL級)如下:第4章習題答案.已知某機主存空間大小為64KB,按字節(jié)編址。要求:(1)若用1KX4位的SRAM芯片構成該主存儲器,需要多少個芯片?(2)主存地址共多少位?幾位用于選片?幾位用于片內(nèi)選址?(3)畫出該存儲器的邏輯框圖。參考答案:64KB/1KX4位=64x2=128片。(2)因為是按字節(jié)編址,所以主存地址共16位,6位選片,10位片內(nèi)選址。(3)顯然,位方向上擴展了2倍,字方向擴展了64倍。下圖中片選信號CS為高電平有效。.用64KX1位的DRAM芯片構成256Kx8位的存儲器。要求:(1)計算所需芯片數(shù),并畫出該存儲器的邏輯框圖。(2)若采用異步刷新方式,每單元刷新間隔不超過2ms,則產(chǎn)生刷新信號的間隔是多少時間?若采用集中刷新方式,則存儲器刷新一遍最少用多少讀寫周期?參考答案:256KB/64KX1位=4x8=32片。存儲器邏輯框圖見下頁(圖中片選信號CS為高電平有效)。(2)因為每個單元的刷新間隔為2ms,所以,采用異步刷新時,在2ms內(nèi)每行必須被刷新一次,且僅被刷新一次。因為DRAM芯片存儲陣列為64K=256x256,所以一共有256行。因此,存儲器控制器必須每隔2ms/256=7.8|iis產(chǎn)生一次刷新信號。采用集中刷新方式時,整個存儲器刷新一遍需要256個存儲(讀寫)周期,在這個過程中,存儲器不能進行讀寫操作。.用8Kx8位的EPROM芯片組成32Kxi6位的只讀存儲器,試問:(1)數(shù)據(jù)寄存器最少應有多少位?(2)地址寄存器最少應有多少位?(3)共需多少個EPROM芯片? (4)畫出該只讀存儲器的邏輯框圖。參考答案:(1)數(shù)據(jù)寄存器最少有16位。(2)地址寄存器最少有:15位(若按16位的字編址);16位(若按字節(jié)編址)。(3)共需要32Kxi6位/810<8位=4*2=8片。(4)該只讀存儲器的邏輯框圖如下(假定按字編址,圖中片選信號CS為高電平有效)。.某計算機中已配有OOOOH-7FFFH的ROM區(qū)域,現(xiàn)在再用8Kx4位的RAM芯片形成32Kx8位的存儲區(qū)域,CPU地址總線為A0-A15,數(shù)據(jù)總線為D0-D7,控制信號為R/W#(讀/寫)、MREQ#(訪存)。要求說明地址譯碼方案,并畫出ROM芯片、RAM芯片與CPU之間的連接圖。假定上述其他條件不變,只
是CPU地址線改為24根,地址范圍000000H—007FFFH為ROM區(qū),剩下的所有地址空間都用8Kx4位的RAM芯片配置,則需要多少個這樣的RAM芯片?參考答案:CPU地址線共16位,故存儲器地址空間為0000H-FFFFH,其中,8000H?FFFFH為RAM區(qū),共2"=32K個單元,其空間大小為32KB,故需8Kx4位的芯片數(shù)為32KB/8KX4位=4x2=8片。因為ROM區(qū)在0000H?7FFFH,RAM區(qū)在8000H-FFFFH,所以可通過最高位地址來區(qū)分,當A15為0時選中ROM芯片;為1時選中RAM芯片,此時,根據(jù)A.和An進行譯碼,得到4個譯碼信號,分別用于4組字擴展芯片的片選信號。(圖略,可參照圖4.15)若CPU地址線為24位,ROM區(qū)為000000H?007FFFH,貝?。㏑OM區(qū)大小為32KB,總大小為16MB=214KB=512x32KB,所以RAM區(qū)大小為511x32KB,共需使用RAM芯片數(shù)為511x32KB/8Kx4位=511x4x2個芯片。.假定一個存儲器系統(tǒng)支持4體交叉存取,某程序執(zhí)行
過程中訪問地址序列為3,9,17,2,51,37,13,4,8,41,67,10,則哪些地址訪問會發(fā)生體沖突?參考答案:對于4體交叉訪問的存儲系統(tǒng),每個存儲模塊的地址分布為:BankO:0、4、8、12、16 Bankl: 5、9、13、17...37...41...Bank2:2、6、10、14、18 Bank3: 7、11、15、19...51...67如果給定的訪存地址在相鄰的4次訪問中出現(xiàn)在同一個Bank內(nèi),就會發(fā)生訪存沖突。所以,17和9、37和17、13和37、8和4發(fā)生沖突。.現(xiàn)代計算機中,SRAM一般用于實現(xiàn)快速小容量的cache,而DRAM用于實現(xiàn)慢速大容量的主存。以前超級計算機通常不提供cache,而是用SRAM來實現(xiàn)主存(如,Cray巨型機),請問:如果不考慮成本,你還這樣設計高性能計算機嗎?為什么?參考答案:不這樣做的理由主要有以下兩個方面:①主存越大越好,主存大,缺頁率降低,因而減少了訪問磁盤所需的時間。顯然用DRAM芯片比用
SRAM芯片構成的主存容量大的多。②程序訪問的局部性特點使得cache的命中率很高,因而,即使主存沒有用快速的SRAM芯片而是用DRAM芯片,也不會影響到訪問速度。.分別給出具有下列要求的程序或程序段的示例:(1)對于數(shù)據(jù)的訪問,幾乎沒有時間局部性和空間局部性。(2)對于數(shù)據(jù)的訪問,有很好的時間局部性,但幾乎沒有空間局部性。(3)對于數(shù)據(jù)的訪問,有很好的空間局部性,但幾乎沒有時間局部性。(4)對于數(shù)據(jù)的訪問,空間局部性和時間局部性都好。參考答案(略):可以給出許多類似的示例。例如,對于按行優(yōu)先存放在內(nèi)存的多維數(shù)組,如果按列優(yōu)先訪問數(shù)組元素,則空間局部性就差,如果在一個循環(huán)體中某個數(shù)組元素只被訪問一次,則時間局部性就差。.假定某機主存空間大小1GB,按字節(jié)編址。cache的數(shù)據(jù)區(qū)(即不包括標記、有效位等存儲區(qū))有64KB,
塊大小為128字節(jié),采用直接映射和全寫(write-through)方式。請問:(1)主存地址如何劃分?要求說明每個字段的含義、位數(shù)和在主存地址中的位置。(2)cache的總?cè)萘繛槎嗌傥??參考答案?1)主存空間大小為1GB,按字節(jié)編址,說明主存地址為30位。cache共有64KB〃28B=512行,因此,行索引(行號)為9位;塊大小128字節(jié),說明塊內(nèi)地址為7位。因此,30位主存地址中,高14位為標志(Tag);中間9位為行索引;低7位為塊內(nèi)地址。(2)因為采用直接映射,所以cache中無需替換算法所需控制位,全寫方式下也無需修改(dirty)位,而標志位和有效位總是必須有的,所以,cache總?cè)萘繛?12x(128x8+14+1)=519.5K位。11.假定某計算機的cache共16行,開始為空,塊大小為1個字,采用直接映射方式。CPU執(zhí)行某程序時,依次訪問以下地址序列:2,3,11,16,21,13,64,48,19,11,3,22,4,27,6和11。要求:
(1)說明每次訪問是命中還是缺失,試計算訪問上述地址序列的命中率。(2)若cache數(shù)據(jù)區(qū)容量不變,而塊大小改為4個字,則上述地址序列的命中情況又如何?參考答案cache采用直接映射方式,其數(shù)據(jù)區(qū)容量為16行xl字/行=16字;主存被劃分成1字/塊,所以,主存塊號=字號。因此,映射公式為:cache行號=主存塊號mod16=字號mod16。開始cache為空,所以第一次都是miss,以下是映射關系(字號-cache行號)和命中情況。2-2:miss,3-3:miss,11-11:miss,16-0:miss,21-5:miss)13-13:miss,64-0:miss、replace,48-0:miss>replace,19-3:miss>replace,11-11:hit,3-3:miss>replace,22-6:miss,4-4:miss,27-11:miss>replace,6-6:miss、replace,11-11:miss>replaceo只有一次命中!cache采用直接映射方式,數(shù)據(jù)區(qū)容量不變,為16個字,每塊大小為4個字,所以,cache共有4行;主存被劃分為4個字/塊,所以,主存塊號=[字號/4]。因此,映射公式為:
cache行號=主存塊號mod4=[字號/4]mod4o以下是映射關系(字號?主存塊號-cache行號)和命中情況。2-0-0:miss,3-0-0:hit,11-2-2:miss,16-4-0:miss、replace,21-5-l>13-3-3:miss,64-16-0>48-12-0>19-4-0:miss,replace,11-2-2:hit,3-0-0:miss>replace,22-5-1:hit,4-1-1:miss>replace,27-6-2:miss、replace,6-1-1:hit,11-2-2:miss>replaceo命中4次。由此可見,塊變大后,能有效利用訪問的空間局部性,從而使命中率提高!.假定數(shù)組元素在主存按從左到右的下標順序存放。試改變下列函數(shù)中循環(huán)的順序,使得其數(shù)組元素的訪問與排列順序一致,并說明為什么修改后的程序比原來的程序執(zhí)行時間短。intsum_array(inta[N][N][N]){inti9j,k,sum=0;for(i=0;i<N;i++)for(j=0;j<N;j++)for(k=0;k<N;k++)sum+=a[k][i][j];returnsum;)參考答案:intsum_array(inta[N][N][N])(inti,j,k,sum=0;for(k=0;k<N;k++)for(i=0;i<N;i++)for(j=0;j<N;j++)sum+=a[k][i][j];returnsum;)修改后程序的數(shù)組元素的訪問與排列順序一致,使得空間局部性比原程序好,故執(zhí)行時間更短。.分析比較以下三個函數(shù)的空間局部性,并指出哪個最好,哪個最差?
#deHneN1000#defineN1000#defineNtypedefstruct{typedef1000intvel[3];struct{typedefintacc[3];intvel[3];struct{}point;intacc[3];intvel[3];pointp[N];}point;intacc[3];voidclearl(pointpointp[N];}point;*p,intn)voidpointp[N];fw* /s-參考答案:對于函數(shù)clearL其數(shù)組訪問順序與在內(nèi)存的存放順序完全一致,因此,空間局部性最好。對于函數(shù)clear!,其數(shù)組訪問順序在每個數(shù)組元素內(nèi)跳越式訪問,相鄰兩次訪問的單元最大相差3個int型變量(假定sizeof(int)=4,則相當于12B),因此空間局部性比clearl差。若主存塊大小比12B小的話,則大大影響命中率。對于函數(shù)clear3,其數(shù)組訪問順序與在內(nèi)存的存放順序不一致,相鄰兩次訪問的單元都相差6個int型變量(假定sizeof(int)=4,則相當于24B)因此,空間局部性比clear2還差。若主存塊大小比
24B小的話,則大大影響命中率。.以下是計算兩個向量點積的程序段:floatdotproduct(floatx[8],floaty[8])(floatsum=0.0;inti9;for(i=0;i<8;i++)sum+=x[i]*y[i];returnsum;)要求:(1)試分析該段代碼中數(shù)組x和y的時間局部性和空間局部性,并推斷命中率的高低。(2)假定該段程序運行的計算機的數(shù)據(jù)cache采用直接映射方式,其數(shù)據(jù)區(qū)容量為32字節(jié),每個主存塊大小為16字節(jié)。假定編譯程序?qū)⒆兞縮um和i分配給寄存器,數(shù)組x存放在00000040H開始的32字節(jié)的連續(xù)存儲區(qū)中,數(shù)組y緊跟在x后進行存放。試計算該程序數(shù)據(jù)訪問的命中率,要求說明每次訪問的cache命中情況。(3)將上述(2)中的數(shù)據(jù)cache改用2-路組相聯(lián)映射方式,塊大小改為8字節(jié),其他條件不變,則該程序數(shù)據(jù)訪問的命中率是多少?(4)在上述(2)中條件不變的情況下,如果將數(shù)組x定義為fk)at[12],則數(shù)據(jù)訪問的命中率是多少?參考答案:(1)數(shù)組x和y都按存放順序訪問,不考慮映射的情況下,空間局部性都較好,但都只被訪問一次,故沒有時間局部性。命中率的高低與塊大小、映射方式等都有關,所以,無法推斷命中率的高低。(2)cache采用直接映射方式,塊大小為16字節(jié),數(shù)據(jù)區(qū)大小為32字節(jié),故cache共有2行。數(shù)組x的8個元素(共32B)分別存放在主存40H開始的32個單元中,共有2個主存塊,其中x[0]?x[3]在第4塊,x[4]?x[7]在第5塊中;數(shù)組y的8個元素(共32B)分別在主存第6塊和第7塊中。所以,x[0]?x[3]和y[0]?y[3]都映射到cache第0行;x[4]?x[7]和y[4]?y[7]都映射到cache第1行。ca第0-3第4-7
che次循環(huán)次循環(huán)第0行x[0-3],y[0-3]第1行x[4-7],y[4-7]每調(diào)入一塊,裝入4個數(shù)組元素,因為x[i]和y[i]總是映射到同一行,相互淘汰對方,故每次都不命中,命中率為0.(3)改用2路組相聯(lián),塊大小為8B,則cache共有4行,每組兩行,共兩組。數(shù)組x有4個主存塊,x[0]?x[l]、x[2]?x[3],x[4]-x[5],x[6]?x⑺分別在第8?11塊中;數(shù)組y有4個主存塊,y[0]?y[l]、y[2]?y[3],y[4]?y[5],y[6]?y[7]分另lj在第12?15塊中;cache第0行第1行第ox[0-l],y[0-i],組x[4-5]y[4-5]第1x[2-3],y[2-3],組x[6-7]y[6-7]每調(diào)入一塊,裝入兩個數(shù)組元素,第二個數(shù)組元素的訪問總是命中,故命中率為50%。(4)若(2)中條件不變,數(shù)組x定義了12個元素,共有48B,使得y從第7塊開始,因而,x[i]和y[i]就不會映射到同一個cache行中,即:x[0]?x[3]在第4塊,x[4]?x[7]在第5塊,x網(wǎng)?x[U]在第6塊中,y[0]?y[3]在第每調(diào)入一塊,裝入4個數(shù)組元素,第一個元素不命中,后面3個總命中,故命中率為75%o.以下是對矩陣進行轉(zhuǎn)置的程序段:typedefintarray[4][4];voidtranspose(arraydst,arraysrc)(inti,j;for(i=0;i<4;i++)for(j=0;j<4;j++)
dst[j][i]=src[i][j];假設該段程序運行的計算機中sizeof(int)=4,且只有一級cache,其中LIdatacache的數(shù)據(jù)區(qū)大小為32B,采用直接映射、寫回方式,塊大小為16B,初始為空。數(shù)組dst從地址OOOOCOOOH開始存放,數(shù)組src從地址OOOOCO40H開始存放。填寫下表,說明數(shù)組元素src[row][col]和dst[row][col]映射到cache的哪一行,其訪問是命中(hit)還是失效(miss)。若LIdatacache的數(shù)據(jù)區(qū)容量改為128B時,重新填寫表中內(nèi)容。src數(shù)組dst數(shù)組32Bcol=0col=1col=2col=3col=0col=1col=2col=3row=00/miss0/missO/hit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年生源地助學信用貸款協(xié)議標準格式
- 2024裝修公積金貸款協(xié)議條款樣本版
- 泥敷劑項目評價分析報告
- 玻璃罐相關項目實施方案
- 2025屆江西高三金太陽10月聯(lián)考語文試卷含答案
- 電熱服裝相關項目實施方案
- 文化傳媒內(nèi)容制作指導手冊
- 房地產(chǎn)銷售市場分析及營銷策略
- 建筑工程質(zhì)量通病防治措施
- Unit5語音(復習講義)-2023-2024學年三年級英語上冊單元速記·巧練(人教PEP版)
- 融媒體綜藝節(jié)目制作學習通超星期末考試答案章節(jié)答案2024年
- 期中 (試題) -2024-2025學年譯林版(三起)(2024)英語三年級上冊
- 2024年《形勢與政策》知識考試題庫(含答案)
- 秀場內(nèi)外-走進服裝表演藝術智慧樹知到期末考試答案章節(jié)答案2024年武漢紡織大學
- 四年級語文 部編版四上21《古詩三首》4 全國公開課一等獎
- 公司財務審計報告要求
- 專業(yè)技術人員考核辦法及細則
- 預應力錨索張拉試驗方案
- 重大危險源包保責任制管理制度
- 二襯施工現(xiàn)場檢查記錄表
- 架空絕緣配電線路設計技術規(guī)程DLT6011996
評論
0/150
提交評論