計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課后答案(清華大學(xué)出版社-袁春風(fēng)主編)_第1頁(yè)
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課后答案(清華大學(xué)出版社-袁春風(fēng)主編)_第2頁(yè)
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課后答案(清華大學(xué)出版社-袁春風(fēng)主編)_第3頁(yè)
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課后答案(清華大學(xué)出版社-袁春風(fēng)主編)_第4頁(yè)
計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課后答案(清華大學(xué)出版社-袁春風(fēng)主編)_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章 習(xí) 題答案若有兩個(gè)基準(zhǔn)測(cè)試程序P1和P2在機(jī)器M1和M2M1和M250008000元,下表給出了P1和P2M1M2上所花的時(shí)間和指令條數(shù)。程序程序P1P2指令條數(shù)200×106300×103M1執(zhí)行時(shí)間(ms)100003指令條數(shù)150×106420×103M2執(zhí)行時(shí)間(ms)50006請(qǐng)回答下列問題:對(duì)于P1,哪臺(tái)機(jī)器的速度快?快多少?對(duì)于P2呢?在M1上執(zhí)行P1和P2的速度分別是多少M(fèi)IPS?在M2來看,對(duì)于P2,哪臺(tái)機(jī)器的速度快?快多少?M1M2800MHzM1和M2上執(zhí)行P1時(shí)的平均時(shí)鐘周期數(shù)CPI各是多少?如果某個(gè)用戶需要大量使用程序該用戶需要大批購(gòu)進(jìn)機(jī)器時(shí),應(yīng)該選擇M1還是M2?為什么?(提示:從性價(jià)比上考慮)如果另一個(gè)用戶也需要購(gòu)進(jìn)大批機(jī)器,但該用戶使用P1和P2間,那么,應(yīng)該選擇M1M2?為什么?參考答案:(1)對(duì)于P1,M2比M1快一倍;對(duì)于P2,M1比M2快一倍。(2)M1,P1的速度為:200M/10=20MIPS;P2300k/0.003=100MIPSM2,P1的速度為:150M/5=30MIPS;P2420k/0.006=70MIPS。從執(zhí)行速度來看,對(duì)于P2,因?yàn)?00/70=1.43倍,所以M1比M2快0.43倍。(3)在M1上執(zhí)行P1時(shí)的平均時(shí)鐘周期數(shù)CPI為:10×800M/(200×106)=40。在M2上執(zhí)行P1時(shí)的平均時(shí)鐘周期數(shù)CPI為:5×1.2G/(150×106)=40??紤]運(yùn)行P1時(shí)M1M2能應(yīng)考慮執(zhí)行時(shí)間,其性能為執(zhí)行時(shí)間的倒數(shù)。故性價(jià)比R為:R=1/(執(zhí)行時(shí)間×價(jià)格)R越大說明性價(jià)比越高,也即,“執(zhí)行時(shí)間×價(jià)格”的值越小,則性價(jià)比越高。因?yàn)?0×5000>5×8000,所以,M2的性價(jià)比高。應(yīng)選擇M2。P1和P2需要同等考慮,性能有多種方式:執(zhí)行時(shí)間總和、算術(shù)平均、幾何平均。若用算術(shù)平均方式,則:因?yàn)?10+0.003)/2×5000>(5+0.006)/2×8000,所以M2的性價(jià)比高,應(yīng)選擇M2。sqrt(10×0.003)×5000<sqrt(5×0.006)M1應(yīng)選擇M1。機(jī)器M1A1B2C2D3E4若機(jī)器M1M2具有相同的指令集,其時(shí)鐘頻率分別為1GHz1.5GHz型的指令A(yù)機(jī)器M1A1B2C2D3E4M2M222456請(qǐng)回答下列問題:M1和M2的峰值MIPS各是多少?假定某程序P的指令序列中,五類指令具有完全相同的指令條數(shù),則程序P在M1M2行時(shí),哪臺(tái)機(jī)器更快?快多少?在M1M2上執(zhí)行程序P時(shí)的平均時(shí)鐘周期數(shù)CPI各是多少?參考答案:(1)M1上可以選擇一段都是A類指令組成的程序,其峰值MIPS為1000MIPS。M2上可以選擇一段A和B類指令組成的程序,其峰值MIPS為1500/2=750MIPS。(2)5類指令具有完全相同的指令條數(shù),所以各占20%。M1M2上執(zhí)行程序P時(shí)的平均時(shí)鐘周期數(shù)CPIM1:20%×(1+2+2+3+4)=0.2×12=2.4M2:20%×(2+2+4+5+6)=0.2×19=3.8假設(shè)程序P的指令條數(shù)為N,則在M1和M2上的執(zhí)行時(shí)間分別為:M1:2.4×N×1/1G=2.4N(ns)M2:3.8×N×1/1.5G=2.53N(ns)M1執(zhí)行P的速度更快,每條指令平均快0.13ns,也即M1比M2快0.13/2.53×100%≈5%。(P在M1上執(zhí)行比M2上快(3.2.4)/3.8100%=36.8錯(cuò)誤的。請(qǐng)問錯(cuò)在什么地方?)假設(shè)同一套指令集用不同的方法設(shè)計(jì)了兩種機(jī)器M1M2。機(jī)器M10.8ns,機(jī)器M21.2ns。某個(gè)程序P在機(jī)器M1上運(yùn)行時(shí)的CPI4,在M2上的CPI。對(duì)于程序來說,哪臺(tái)機(jī)器的執(zhí)行速度更快?快多少?參考答案:假設(shè)程序P的指令條數(shù)為N,則在M1和M2上的執(zhí)行時(shí)間分別為:M1:4N×0.8=3.2N(ns)M2:2N×1.2=2.4N(ns)所以,M2執(zhí)行P的速度更快,每條指令平均快0.8ns,比M1快0.8/3.2×100%=25%。假設(shè)某機(jī)器M4GHz,用戶程序PM8×109,其CPI1.25,則P在M上的執(zhí)行時(shí)間是多少?若在機(jī)器M上從程序P開始啟動(dòng)到執(zhí)行結(jié)束所需的時(shí)間是4秒,則P占用CPU時(shí)間的百分比是多少?參考答案:程序PM=2.5P執(zhí)行開始到執(zhí)行結(jié)束的總時(shí)間為42.5秒是P在CPU上真正的執(zhí)行時(shí)間,其他時(shí)間可能執(zhí)行操作系統(tǒng)程序或其他用戶程序。程序P占用的CPU時(shí)間的百分比為:2.5/4=62.5%。假定某編譯器對(duì)某段高級(jí)語言程序編譯生成兩種不同的指令序列S1和S2500MHzM上運(yùn)行,目標(biāo)指令序列中用到的指令類型有ABCD四類。四類指令在MCPI和兩個(gè)指令序列所用的各類指令條數(shù)如下表所示。ABCD各指令的CPI1234S1的指令條數(shù)5221S2的指令條數(shù)1115請(qǐng)問:S1和S2各有多少條指令?CPI各為多少?所含的時(shí)鐘周期數(shù)各為多少?執(zhí)行時(shí)間各為多少?參考答案:S110條指令,CPI為(5×1+2×2+2×3+1×4)/10=1.9,10×1.9=19,執(zhí)行時(shí)19/500M=。S28條指令,CPI為(1×1+1×2+1×3+5×4)/8=3.25,8×3.25=26,執(zhí)行時(shí)26/500M=。(注:從上述結(jié)果來看,對(duì)于同一個(gè)高級(jí)語言源程序,在同一臺(tái)機(jī)器上所生成的目標(biāo)程序不同,其執(zhí)行時(shí)間可能不同,而且,并不是指令條數(shù)少的目標(biāo)程序執(zhí)行時(shí)間就一定少。)假定機(jī)器M1.2GHz,某程序P在機(jī)器M12秒鐘。對(duì)P優(yōu)化時(shí),將其42P’M上乘法指令的CPI5,左移指令的CPI2,PP’1.2P中有多少條乘法指令被替換成了左移指令被執(zhí)行?參考答案:顯然,P’10P’21.2G×2/(5–2)=800M。第二章 習(xí) 題答案實(shí)現(xiàn)下列各數(shù)的轉(zhuǎn)換。(1)(25.8125)10=(?)2=(?)8=(?)16(2)(101101.011)2=(?)10=(?)8=(?)16=(?)8421(3)(010110010110.0011)8421=(?)10=(?)2=(?)16(4)(4E.C)16=(?)10=(?)2參考答案:(1)(25.8125)10=(11001.1101)2=(31.64)8=(19.D)16(2)(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(4)(4E.C)16=(78.75)10=(01001110.11)2假定機(jī)器數(shù)為8位17位數(shù)值,寫出下列各二進(jìn)制數(shù)的原碼和補(bǔ)碼表示。+0.1001,–0.1001,+1.0,–1.0,+0.010100,–0.010100,+0,–0參考答案:原碼補(bǔ)碼+0.1001:0.10010000.1001000–0.1001:1.10010001.0111000+1.0:溢出溢出–1.0:溢出1.0000000+0.010100:0.01010000.0101000–0.010100:1.01010001.1011000+0:0.00000000.0000000–0:1.00000000.0000000假定機(jī)器數(shù)為8位17位數(shù)值,寫出下列各二進(jìn)制數(shù)的補(bǔ)碼和移碼表示。+1001,–1001,+1,–1,+10100,–10100,+0,–0參考答案:移碼 補(bǔ)碼+1001: 10001001 00001001–1001: 01110111 11110111+1: 10000001 00000001–1: 011111111 11111111+10100: 10010100 00010100–10100: 01101100 11101100+0: 10000000 00000000–0: 10000000 00000000[x],求x補(bǔ)(1)[x]=1.1100111 (2)[x]=10000000補(bǔ) 補(bǔ)(3)[x]=0.1010010

=11010011補(bǔ) 補(bǔ)參考答案:(1)[x]=1.1100111 x=–0.0011001B補(bǔ)(2)[x]=10000000 x=–10000000B=–128補(bǔ)(3)[x]=0.1010010 x=+0.101001B補(bǔ)(4)[x]=11010011 x=–101101B=–45補(bǔ)32位字長(zhǎng)的機(jī)器中帶符號(hào)整數(shù)用補(bǔ)碼表示,浮點(diǎn)數(shù)用IEEE754標(biāo)準(zhǔn)表示,寄存器R1R2R1:0000108BH,R2:8080108BH指令執(zhí)行時(shí)寄存器內(nèi)容對(duì)應(yīng)的真值不同。假定執(zhí)行下列運(yùn)算指令時(shí),操作數(shù)為寄存器R1R2的內(nèi)容,則R1和R2中操作數(shù)的真值分別為多少?無符號(hào)數(shù)加法指令帶符號(hào)整數(shù)乘法指令參考答案:R1=0000108BH=00000000000000000001000010001011bR2=8080108BH=10000000100000000001000010001011bR1和R2R2:8080108BH。R2R1為正數(shù),R2R1+108BH,R2–(0111111101111111111011110100b+1b)–7F7FEF75H。R2中是操作數(shù)的IEEE754IEEE754標(biāo)準(zhǔn)中,單精度浮點(diǎn)數(shù)的位數(shù)為32位,其中包含1位符號(hào)位,8位階碼,23位尾數(shù)。由R10000000000000000001000010001011,故其為非規(guī)格化浮點(diǎn)數(shù),指數(shù)為–126,尾數(shù)中沒有隱藏的1,用十六進(jìn)制表示尾數(shù)為+0.002116H,故R1表示的真值為+0.002116H×10-126。由R20000000,尾數(shù)部分為00000000001000010001011,故其為規(guī)格化浮點(diǎn)數(shù),指數(shù)為1–127=–1261,用十六進(jìn)制表示尾數(shù)為–1.002116H,故R2表示的真值為–1.002116H×10-126M32MC程序中的關(guān)系表達(dá)式,請(qǐng)參照已有的表欄內(nèi)容完成表中后三欄內(nèi)容的填寫。關(guān)系表達(dá)式運(yùn)算類型結(jié)果說明0==0U無符號(hào)整數(shù)100…0B=00…0B–1<0有符號(hào)整數(shù)111…1B(–1)<00…0B(0)–1<0U無符號(hào)整數(shù)011…1B(232–1)>00…0B(0)2147483647>–2147483647–1有符號(hào)整數(shù)1011…1B(231–1)>100…0B(–231)2147483647U>–2147483647–1無符號(hào)整數(shù)0011…1B(231–1)<100…0B(231)2147483647>(int)2147483648U有符號(hào)整數(shù)1011…1B(231–1)>100…0B(–231)–1>–2有符號(hào)整數(shù)111…1B(–1)>11…10B(–2)(unsigned)–1>–2無符號(hào)整數(shù)111…1B(232–1)>11…10B(232–2)C語言程序,用來計(jì)算一個(gè)數(shù)組a中每個(gè)元素的和。當(dāng)參數(shù)len0時(shí),返回值應(yīng)該是但是在機(jī)器上執(zhí)行時(shí),卻發(fā)生了存儲(chǔ)器訪問異常。請(qǐng)問這是什么原因造成的,并說明程序應(yīng)該如何修改。1 floatsum_elements(floata[],unsignedlen)2 {inti;float result=56 for(i=0;i<=len–1;i++)result+=a[i];return9 }參考答案:lenunsigned,所以,當(dāng)len=0len-1數(shù),因而,任何無符號(hào)數(shù)都比它小,使得循環(huán)體被不斷執(zhí)行,引起數(shù)組元素的訪問越界,發(fā)生存儲(chǔ)器訪問異常。只要將len聲明為int型,或循環(huán)的測(cè)試條件改為i<len。設(shè)某浮點(diǎn)數(shù)格式為:數(shù)符數(shù)符階碼尾數(shù)1位 5位移

6位補(bǔ)碼其中,移碼的偏置常數(shù)為16,補(bǔ)碼采用一位符號(hào)位,基數(shù)為4。(1)用這種格式表示下列十進(jìn)制數(shù):+1.7,–0.12,+19,–1/8。(2)12(假定采用0舍1入法進(jìn)行舍入)(1)+1.7+1.1011001B0.011011B×41,1+161710001B,+0.011011的補(bǔ)碼,+1.7010001。–0.120.000111101B0.011111B4–1–116=1501111B,0.011111的補(bǔ)碼,即1.100001,所以–0.12表示為101111100001。+19=+10011B=0.010011B×433+16=19=10011B,0.010011+19表010011。–1/8=–0.125=–0.001B=–0.100000×4–1,階碼為–1+16=15=01111B,尾數(shù)為–0.100000的補(bǔ)碼,即1.100000,所以–1/8表示為101111100000。(2)該格式浮點(diǎn)數(shù)表示的范圍如下。正數(shù)最大值:0.111111B×411111,即:0.333×415(≈230≈109)正數(shù)最小值:0.000001B400000,即:0.001×4–16(≈2–34≈10–10)負(fù)數(shù)最大值:–0.000001B400000,即:–0.001×4–16負(fù)數(shù)最小值:–1.000000B–1.000×415因此,該格式浮點(diǎn)數(shù)的數(shù)量級(jí)在10–10~109之間。12位定點(diǎn)補(bǔ)碼整數(shù)的表示范圍為:–211~+(211–1),即:–2048~2047由此可見,定點(diǎn)數(shù)和浮點(diǎn)數(shù)的表示范圍相差非常大。下列幾種情況所能表示的數(shù)的范圍是什么?16位無符號(hào)整數(shù)16位原碼定點(diǎn)小數(shù)16位補(bǔ)碼定點(diǎn)小數(shù)16位補(bǔ)碼定點(diǎn)整數(shù)下述格式的浮點(diǎn)數(shù)(2128)數(shù)符數(shù)符階碼尾數(shù)1位 8位移碼 7位原碼參考答案:(1)無符號(hào)整數(shù):0~216–1。(2)原碼定點(diǎn)小數(shù):–(1–2–15)~+(1–2–15)。(3)補(bǔ)碼定點(diǎn)小數(shù):–1~+(1–2–15)。(4)補(bǔ)碼定點(diǎn)整數(shù):–32768~+32767。(5)浮點(diǎn)數(shù):負(fù)數(shù):–(1–2–7)×2+127~–2–7×2–128。正數(shù):+2–135~(1–2–7)×2+127。IEEE754單精度浮點(diǎn)數(shù)格式表示下列十進(jìn)制數(shù)。+1.75,+19,–1/8,258參考答案:+1.75=+1.11B=1.11B20,0+127=01111111B,+1.700111111111000000000000000003FE00000H。+19=+10011B=+1.0011B×244+127=10000011B,01.00110…0,所以+19表示為01000001100110000000000000000000,用十六進(jìn)制表示為41980000H。–1/8=–0.125=–0.001B=–1.0×233+127=011111001.…–1/8表示為10111110000000000000000000000000,用十六進(jìn)制表示為BE000000H。258=100000010B=1.0000001B×28,故階碼為8+127=10000111B,數(shù)符為0,尾數(shù)為1.0000001,所以258表示為01000011100000010000000000000000,用十六進(jìn)制表示為43810000H。409832位補(bǔ)碼整數(shù)和IEEE754單精度浮點(diǎn)格式表示該變量(用十六進(jìn)制表示,并說明哪段二進(jìn)制序列在兩種表示中完全相同,為什么會(huì)相同?參考答案:4098=+1000000000010B=+1.00000000001×21232位2-補(bǔ)碼形式為:00000000000000000001000000000010(00001002H)IEEE754單精度格式為:01000101100000000001000000000000(45801000H)粗體部分為除隱藏位外的有效數(shù)字,因此,在兩種表示中是相同的序列。–214748364732IEEE754單精度浮點(diǎn)格式表示該變量(結(jié)果用十六進(jìn)制表示參考答案:–2147483647=–1111111111111111111111111111111B=–1.1111111111111111111111111111113032位2-補(bǔ)碼形式為:10000000000000000000000000000001(80000001H)IEEE754單精度格式為:11001110111111111111111111111111(CEFFFFFFH)32位2-補(bǔ)碼形式能表示精確的值,而浮點(diǎn)數(shù)表示的是近似值,低位被截?cái)嘞卤斫o出了有關(guān)IEEE754容,要求填入其他浮點(diǎn)數(shù)的相應(yīng)內(nèi)容(a110之間的正純小數(shù))項(xiàng)目階碼尾數(shù)單精度以2的冪次表示 以10的冪次的值 示的值雙精度以2的冪次表示的值以10的冪次表示的值0000000000….000 0001011111110….001 111最大規(guī)格化數(shù)111111101…11(2–2–23)×2127 a×1038(2–2–52)×21023a×10308最小規(guī)格化數(shù)000000010….001.0×2–126 a×10–381.0×2–1022a×10–308最大非規(guī)格化數(shù)000000001…11(1–2–23)×2–126 a×10–38(1–2–52)×2–1022a×10–308最小非規(guī)格化數(shù)000000000…012–23×2–126=2–149 a×10–442–52×2–1022a×10–?+∞111111110….00– –––NaN11111111非全0– –––16.已知下列字符編碼:A=1000001,a=1100001,0=0110000,求E、e、f、7、G、Z、5的7位ACSII碼和第一位前加入奇校驗(yàn)位后的8位編碼。參考答案:E的ASCII碼為‘A’+(‘E’–‘A’)=1000001+100=1000101,奇校驗(yàn)位P=0,第一位前加入奇校驗(yàn)801000101。e的ASCIIea’)=1100001+100=110,奇校驗(yàn)位P=1,第一位前加入奇校驗(yàn)81110。fASCII碼為‘a(chǎn)’+(‘fa’)=1100001+101=1100110,奇校驗(yàn)位P=1,位后的8位編碼是11100110。7的ASCII碼(7-0) =0110000+111=011的8位編碼是00110111。

校驗(yàn)位P=0,第一位前加入奇校驗(yàn)位后GASCII碼為‘A’‘G100000101101000111,P1,第一位前加入奇校驗(yàn)位后的8位編碼是11000111。ZASCII碼為‘A’+(‘Z1000001110011011010,P1,第一位前加入奇校驗(yàn)位后的8位編碼是11011010。5ASCII碼為‘0’+(50)01100001010110101P1,第一位前加入奇校驗(yàn)位后的8位編碼是10110101。、yi,其中,xyfloat型變量(IEEE754單精度浮點(diǎn)數(shù)表示i是16位short型變量(用補(bǔ)碼表示x=–0.12y=7.i=10,它們都被寫到了主存(按字節(jié)編址,其地址分別是10108和11x、yi在內(nèi)存的存放位置。參考答案:–0.125=–0.001B=–1.0×2-3x在機(jī)器內(nèi)部的機(jī)器數(shù)為:10111110000…0(BE000000H)7.5=+111.1B=+1.111×22y在機(jī)器內(nèi)部的機(jī)器數(shù)為:01000000111100…0(40F00000H)100=64+32+4=1100100Bi在機(jī)器內(nèi)部表示的機(jī)器數(shù)為:0000000001100100(0064H)地址大端機(jī)內(nèi)容小端機(jī)內(nèi)容100BEH00H10100H00H10200H00H10300HBEH10840H00H109F0H00H11000HF0H11100H40H11200H64H11364H00H8328FAB964個(gè)校驗(yàn)位應(yīng)為什么?若接受方收到的數(shù)據(jù)信息和校驗(yàn)位分別為873CAB96H0101B,則說明發(fā)生了什么情況,并給出驗(yàn)證過程。參考答案:8F3CAB96H10001111001111001010101110018位有一個(gè)奇校驗(yàn)位,40、10、。873CAB96H1000011100111100101010111001、、0。在接受方進(jìn)行校驗(yàn)判斷如下:4、10、1441、00、08FH87H,說明確實(shí)發(fā)生了傳輸錯(cuò)誤,驗(yàn)證正確。16位數(shù)據(jù)的SEC0101000101000110,說明SEC5錯(cuò)誤。參考答案:對(duì)于16位數(shù)據(jù),可以如下插入校驗(yàn)位:M16M15M14M13M12P5M11M10M9M8M7M6M5P4M4M3M2P3M1P2P1其中Mi是原信息數(shù)據(jù),Pi是加入的校驗(yàn)位,對(duì)于各個(gè)校驗(yàn)位的值可以如下計(jì)算123457911121416111314P1=M⊕M⊕M⊕M⊕M⊕M⊕M⊕M⊕M⊕M⊕M=11234579111214161113141346710P2=M⊕M⊕M⊕M⊕M⊕M1346710

⊕M⊕M⊕M=12348910P3=M⊕M⊕M⊕M⊕M⊕M2348910

⊕M⊕M⊕M=05 6 7 8 9 10 111516P4=M⊕M⊕M⊕M⊕M⊕M⊕5 6 7 8 9 10 111516P5P5=M M M M M=12 13 14 15 1654321所以此時(shí)P54P3P2P1=0001第五位數(shù)據(jù)出錯(cuò)時(shí)數(shù)據(jù)字變?yōu)?10100010101011PPPPP=01010,故障字= 00011⊕01010=01001,說明碼字第9位出錯(cuò),即M5出錯(cuò)。54321x3+1100010,說明如何正確檢測(cè)其錯(cuò)誤,寫出檢測(cè)過程。參考答案:M(x)=+x+1,430,變?yōu)镸’(x)=x3M(x)=x8+x4+x3,M(x)2G(x),得到的余數(shù)為,所以得到CRC100011。CRC210010,則表明正確,否則說明傳輸時(shí)發(fā)生了錯(cuò)誤。此題中接收到的CRC碼為10001011(即數(shù)據(jù)100010加檢驗(yàn)位111000101112除10010010,說明傳輸時(shí)發(fā)生錯(cuò)誤。第3章 習(xí) 題答案2(4)高級(jí)語言中的運(yùn)算和機(jī)器語言(即指令)中的運(yùn)算是什么關(guān)系?假定某一個(gè)高級(jí)語言源程序P中有乘、除運(yùn)算,但機(jī)器M中不提供乘、除運(yùn)算指令,則程序P能否在機(jī)器M上運(yùn)行?為什么?(略)考慮以下C語言程序代碼:int func1(unsigned{return (int)((word<<24)>>24);}int func2(unsignedword){return ((int)word<<24)>>24;}假設(shè)在一個(gè)32位機(jī)器上執(zhí)行這些函數(shù),該機(jī)器使用二進(jìn)制補(bǔ)碼表示帶符號(hào)整數(shù)。無符號(hào)數(shù)采用邏輯移位,帶符號(hào)整數(shù)采用算術(shù)移位。請(qǐng)?zhí)顚懴卤?,并說明函數(shù)func1和func2的功能。W機(jī)器數(shù)值func1(w)機(jī)器數(shù)值func2(w)機(jī)器數(shù)值0000007FH1270000007FH+1270000007FH+12700000080H12800000080H+128FFFFFF80H–128000000FFH255000000FFH+255FFFFFFFFH–100000100H25600000000H000000000H0函數(shù)func1的功能是把無符號(hào)數(shù)高24位清零(左移24位再邏輯右移24位號(hào)數(shù);而函數(shù)func224252424位補(bǔ)符號(hào)位(25位。xyxyx×y(截?cái)嗲埃﹛×y(截?cái)嗪螅┠J綑C(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值無符號(hào)數(shù)11060102001100121004二進(jìn)制補(bǔ)碼110–2010+2111100–4100–4無符號(hào)數(shù)0011111700011171117二進(jìn)制補(bǔ)碼001+1111–1111111–1111–1無符號(hào)數(shù)11171117110001490011二進(jìn)制補(bǔ)碼111–1111–1000001+1001+1C語言代碼,函數(shù)arith()Coptarith(arith()函數(shù)以某個(gè)確MN編譯生成的機(jī)器代碼反編譯生成的。根據(jù)optarith(,可以推斷函數(shù)arith()MN的值各是多少?#define M#define Nint arith (intx,inty){int result=0;result=x*M+returnresult;}intoptarith(intx, inty){int t=x<<=4;x-=t;if(y<0) y+=y>>2;returnx+y;參考答案:可以看出x*M和“intt=x;x<<=4;x-=t;”三句對(duì)應(yīng),這些語句實(shí)現(xiàn)了x乘15的功能(左移4位相當(dāng)于乘以1,然后再減,因此,M等于1;y/N與“if(y<0)y+=3;y>>2;”兩句對(duì)應(yīng),功能主要由第二句“y右移2位”實(shí)現(xiàn),它實(shí)現(xiàn)了y4N。而第一句“ify0y3;y=–1時(shí)進(jìn)行調(diào)整,若不調(diào)整,則–1>>2=–1而–1/4=0–1+3=2,2>>2=0,兩者相等。思考:能否把 if(y<0) y+=3;改成if(y<0) y+=2;不能!因?yàn)閥=-4時(shí)不正確。A4A1B4B1C4C1的邏輯表達(dá)式。參考答案:串行進(jìn)位:C1=X1C0+Y1C0+X1Y1C2=X2C1+Y2C1+X2Y2C3=X3C2+Y3C2+X3Y3C4=X4C3+Y4C3+X4Y4并行進(jìn)位:C1=X1Y1+(X1+Y1)C0C2=X2Y2+(X2+Y2)X1Y1+(X2+Y2)(X1+Y1)C0C3=X3Y3+(X3+Y3)X2Y2+(X3+Y3)(X2+Y2)X1Y1+(X3+Y3)(X2+Y2)(X1+Y1)C0C4=X4Y4+(X4+Y4)X3Y3+(X4+Y4)(X3+Y3)X2Y2+(X4+Y4)(X3+Y3)(X2+Y2)X1Y1+(X4+Y4)(X3+Y3)(X2+Y2)(X1+Y1)C0SN74181SN7418216位先行進(jìn)位補(bǔ)碼加給出零標(biāo)志、進(jìn)位標(biāo)志、溢出標(biāo)志、符號(hào)標(biāo)志的生成電路。參考答案(圖略:i i 3.153.163.15B輸入端BiBBCC01時(shí)做減法,此時(shí),選擇將BiSN74181BC01時(shí),做加法。i i 零標(biāo)志ZF、進(jìn)位標(biāo)志CF、溢出標(biāo)志OF、符號(hào)標(biāo)志SF的邏輯電路根據(jù)以下邏輯表達(dá)式畫出即可。ZF=F15+F14+F13+F12+F11+F10+F9+F8+F7+F6+F5+F4+F3+F2+F1+F0CF=C16OF=C(ABF

+AB

)+C(ABF

+ABF)0 1515SF=F15

151515

0 1515

151515SN74181SN7418232ALU,要求采用兩級(jí)先行進(jìn)位結(jié)構(gòu)。SN74181SN74182芯片數(shù)。32ALU參考答案(圖略:03.1516ALU16ALUC1616ALU的低位進(jìn)位C8SN741812SN74182。0x10,y–66位機(jī)器數(shù)表示。請(qǐng)按如下要求計(jì)算,并把結(jié)果還原成真值。(1)求[x+y],[x–y]。補(bǔ) 補(bǔ)用原碼一位乘法計(jì)算[x×y]原。MBA(4布斯)乘法計(jì)算[x×y]補(bǔ)。用不恢復(fù)余數(shù)法計(jì)算

的商和余數(shù)。原用不恢復(fù)余數(shù)法計(jì)算

的商和余數(shù)。補(bǔ)參考答案:[10]=001010 [–6]=111010 [6]=000110 [10]=001010 [–6]=100110補(bǔ) 補(bǔ) 補(bǔ) 原 原(1)[10+(–6)]=[10]+[–

=001010+111010=000100(+4)補(bǔ) 補(bǔ) 補(bǔ)[10–(–6)]=[10]+[–(–6)]=001010+000110=010000(+16)補(bǔ) 補(bǔ) 補(bǔ)(2)001010×000110的乘積,原碼一位乘法過程(0省略)下:CPY說明000000110P0=0+0000 y4=0,+000000C,PY同時(shí)右移一位000000011得P10+10101010y3=1,+XC,PY同時(shí)右移一位001010001得P2+1010y2=1,+X011110000C,PY同時(shí)右移一位001111000得P30+00000111y1=0,+0C,PY同時(shí)右移一位000111100得P4若兩個(gè)6位數(shù)相乘的話,則還要右移兩次,得000000111100符號(hào)位為:0 1=因此,[X×Y]=100000111100原即X×Y=–111100B=–60(3)[–10]=110110,布斯乘法過程如下:補(bǔ)P Y y-1 說明補(bǔ)000000 111010 0 設(shè)y-1=0,[P00補(bǔ)y0y-1=00,P、Y直接右移一位1000000 011101 0 得[P]1補(bǔ)補(bǔ)+110110 y1y0=10,+[–X]補(bǔ)110110 P、Y同時(shí)右移一位2111011 001110 1 得[P]2補(bǔ)補(bǔ)+001010 y2y1=01,+[X]補(bǔ)000101P、Y同時(shí)右移一位0000101001110得[P3]補(bǔ)+1101101001110y3y2=10,+[–X]111000補(bǔ)P、Y同時(shí)右移一位111100010011 1得[P4]補(bǔ)+000000010011 1y4y3=11,+0111100P、Y同時(shí)右移一位111110001001 1得[P5]補(bǔ)+000000001001 1y5y4=11,+0111110P、Y同時(shí)右移一位111111000100 1得[P6]補(bǔ)因此,[X×Y]補(bǔ)

=111111000100,即X×Y=–111100B=–60(4)2nn位數(shù),所以[6]原

=0110,[10]原

=00001010,[–6]補(bǔ)

=1010,商的符號(hào)位:0 1=1,運(yùn)算過程(前面兩個(gè)0省略)如下:101101000R2<0,則q3=00110101101000R2<0,則q3=0011010002R2 (RQ同時(shí)左移,空出一位商)+101R1=X–Y101010100R1<0,則q4=0,沒有溢出010101002R(R和Q同時(shí)左移,空出一位商)1+011R2=2R1+Y110010000R3<0,則q2=0100100002R3(R和Q同時(shí)左移,空出一位商)111100000R4<0,則q1=0111000002R4(R和Q同時(shí)左移,空出一位商)00001010R0=X+0110R300001010R0=X+0110R3=2R2+Y+0110R3=2R2+Y+011010000001R5=2R4+YR5q01原(5)將10和–6分別表示成補(bǔ)碼形式為:[10] =01010, [–6] =11010,計(jì)算過程如下:補(bǔ) 補(bǔ)先對(duì)被除數(shù)進(jìn)行符號(hào)擴(kuò)展,[10]=0000001010,[6] =00110補(bǔ) 補(bǔ)余數(shù)寄存器R 余數(shù)商寄存器Q 說 明00000 01010 R0=[X]1101001010R1與[Y]同號(hào),則q5=11101001010R1與[Y]同號(hào),則q5=110100101012R(RQ1)1+00110R2=2R1+[–Y]1101010101R2與[Y]同號(hào),則q4=1,10101010112R(R和1101010101R2與[Y]同號(hào),則q4=1,10101010112R(R和Q同時(shí)左移,空出一位上商1)2+00110R3=2R2+[-Y]1101101011R3與[Y]同號(hào),則q3=110110101112R(R和Q同時(shí)左移,空出一位上商1)3+00110R4=2R3+[–Y]1110010111R4與[Y]同號(hào),則q2=111001011112R4(R和Q同時(shí)左移,空出一位上商0)+00110R5=2R4+[-Y]11110 11111 2R5(RQ1)+00110 R6=2R5+[–Y]00100 11110 R6與[Y]異號(hào),則q0左移,空出一位上商1+00000 + 1 1;余數(shù)不需要修正00100 11111所以,[X/Y]=11111,余數(shù)為00100。補(bǔ)即:X/Y=–0001B=–1,余數(shù)為0100B=4將各數(shù)代入公式“除數(shù)×商+余數(shù)=被除數(shù)”進(jìn)行驗(yàn)證,得:(–6)×(–1)+4=10。1ns0.5nsCRACSA8位無符號(hào)二進(jìn)制數(shù)乘積時(shí)所需的時(shí)間。參考答案:一位乘法:8次右移,8次加法,共計(jì)12ns;二位乘法:4次右移,4次加法,共計(jì)6ns;CRA8+2×(8–1)=2222ns;基于CSA的陣列乘法:本級(jí)進(jìn)位和本級(jí)和同時(shí)傳送到下一級(jí),同級(jí)部分積之間不相互依賴,只進(jìn)行O(N)次加法運(yùn)算,因此,共計(jì)約8ns。IEEE754參考答案:對(duì)于結(jié)果為±1x.xx……x可以表示為:MbMb×2-1,EbEb+1。右規(guī)時(shí)注意以下兩點(diǎn):尾數(shù)右移時(shí),最高位“1”被移到小數(shù)點(diǎn)前一位作為隱藏位,最后一位移出時(shí),要考慮舍入。1。對(duì)于結(jié)果為±0.00……01x……x直到將第一位“1”k10的個(gè)數(shù),則左規(guī)操作可以表示為:MbMb×2k,EbEb–k。左規(guī)時(shí)注意以下兩點(diǎn):k0k位。因?yàn)檫M(jìn)行尾數(shù)相加時(shí),默認(rèn)小數(shù)點(diǎn)位置在第一個(gè)數(shù)值位(即:隱藏位)之后,所以小數(shù)點(diǎn)右移k位后被移到了第一位1后面,這個(gè)1就是隱藏位。EbEb–k1,一共減k次。IEEE754參考答案:浮點(diǎn)運(yùn)算結(jié)果是否溢出,并不以尾數(shù)溢出來判斷,而主要看階碼是否溢出。尾數(shù)溢出時(shí),可通過右規(guī)操作進(jìn)行糾正。階碼上溢時(shí),說明結(jié)果的數(shù)值太大,無法表示;階碼下溢時(shí),說明結(jié)果數(shù)值太小,可以把結(jié)果近似為0。在進(jìn)行對(duì)階、規(guī)格化、舍入和浮點(diǎn)數(shù)的乘發(fā)生階碼上溢或階碼下溢,因此,必須對(duì)階碼進(jìn)行溢出判斷。(有關(guān)對(duì)階碼進(jìn)行溢出判斷的方法可參見教材中相關(guān)章節(jié))假設(shè)浮點(diǎn)數(shù)格式為:階碼是4位移碼,偏置常數(shù)為,尾數(shù)是6位補(bǔ)碼(采用雙符號(hào)位2位附加位(保護(hù)位、舍入位)兩種情況下的值(對(duì)階和右規(guī)時(shí)采用就近舍入到偶數(shù)方式)(1)(15/16)×27+(2/16)(2)(15/16)×27–(2/16)×25(3)(15/16)×25+(2/16)(4)(15/16)×25–(2/16)×27參考答案(假定采用隱藏位:X=(15/16)×27=0.111100B×27=(1.111000)2×26Y1=(2/16)×25=0.001000B×25=(1.000000)2×22Y2=(–2/16)×25=–0.001000B×25=(–1.000000)2×22K=(15/16)=0.111100B×24J1=(2/16)×27=0.001000B(1.000000)2×24J2=(–2/16)×27=–0.001000B×27=(–1.000000)2×24根據(jù)題目所給的各種位數(shù),可以得到在機(jī)器中表示為:[X]=00 1110(1)111000 [Y1]=00 1010 (1)000000 [Y2]=111010 (1)000000浮 浮 浮[K]浮

=00 1100(1)111000 [J1]浮

=00 1100(1)000000 [J2]浮

=111100(1)000000Ex=111Mx=00(1).111000Ey1=101y=00(1).00000Ey2=101y=11(1).000000Ek=1100,MK=00(1).111000,EJ1=1100,MJ1=00(1).000000,EJ2=1100,MJ2=11(1).000000尾數(shù)M沒有附加位時(shí)的計(jì)算:X+Y1x [ΔE]=[E]+[–[E]] (mod=1110+0110=x 補(bǔ) 移 移補(bǔ)ΔE4y1進(jìn)行對(duì)階,結(jié)果為:Ey1Ex1000.000100尾數(shù)相加:Mb=Mx+My1=001.111000+000.000100=1,不需要進(jìn)行規(guī)格化,所以最后結(jié)果為:E=1110,M=00(1).111100,即(31/32)27X+Y2x [ΔE]=[E]+[–[E]] (mod=1110+0110=x 補(bǔ) 移 移補(bǔ)ΔE4y2進(jìn)行對(duì)階,結(jié)果為:Ey2Ex111.111100b=Mx+y2=001.111000+

兩位符號(hào)相等,數(shù)值部分最高為1,不需要進(jìn)行規(guī)格化,所以最后結(jié)果為:E=1110,M=00(1).110100,即(29/32)×27K+J1K [ΔE]=[E]+[–[E]] (mod=1100+0100=K 補(bǔ) 移 移補(bǔ)ΔE=0,根據(jù)對(duì)階規(guī)則可知不需要進(jìn)行對(duì)階。尾數(shù)相加:Mb=MK+MJ1=001.111000+001.000000=010.111000,兩位符號(hào)不等,說明尾數(shù)溢出,需要進(jìn)行右規(guī),最后結(jié)果為:E=1101,M=00(1).011100,即(23/32)×26K+J2K [ΔE]=[E]+[–[E]] (mod=1100+0100=K 補(bǔ) 移 移補(bǔ)ΔE=0,根據(jù)對(duì)階規(guī)則可知不需要進(jìn)行對(duì)階。b=MK+J2=001.111000+111.000000=000.11100,兩位符號(hào)相等,數(shù)值部分最高0,需要進(jìn)行左規(guī),所以最后結(jié)果為:E=1011,M=00(1).110000,即(7/8)24如果有兩位附加位精度上會(huì)有提高,在對(duì)階的時(shí)候要注意小數(shù)點(diǎn)后就不是68位,最后62IEEE754單精度浮點(diǎn)數(shù)格式計(jì)算下列表達(dá)式的值。(1)0.75+(–65.25) (2)0.75–(–65.25)參考答案:x=0.75=0.110...0B=(1.10...0)2×2-1y=–65.25=–1000001.01000...0B=(–1.00000101...0)2×26用IEEE754標(biāo)準(zhǔn)單精度格式表示為:[x]浮=0 0111111010...0 [y]浮=1 10000101 000001010...0所以,Ex=0111111,x=0(1).1...0,Ey=1000010y=1(1).000001010...0尾數(shù)x和y以下是計(jì)算機(jī)中進(jìn)行浮點(diǎn)數(shù)加減運(yùn)算的過程(2位附加位:保護(hù)位和舍入位)(1)0.75+(–65.25)①對(duì)階:[ΔE]補(bǔ)=[Ex]移+[–[Ey]移]補(bǔ)(mod2n)=01111110+01111011=11111001ΔE=–7,根據(jù)對(duì)階規(guī)則可知需要對(duì) x進(jìn)行對(duì)階,結(jié)果為:Ex=Ey=10000101,Mx=00.000000110...000x的尾數(shù)Mx右移7位,符號(hào)不變,數(shù)值高位補(bǔ)0,隱藏位右移到小數(shù)點(diǎn)后面,最后移出的2位保留②b=x+y=00000000110...000+1.000001010...000(注意小數(shù)點(diǎn)在隱藏位后)根據(jù)原碼加減法運(yùn)算規(guī)則,得:00.000000110...000+11.000001010...000上式尾數(shù)中最左邊第一位是符號(hào)位,其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(加粗。③規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為1,所以不需要進(jìn)行規(guī)格化。④舍入:把結(jié)果的尾數(shù)Mb中最后兩位附加位舍入掉,從本例來看,不管采用什么舍入法,結(jié)果都一樣,都是把最后兩個(gè)0去掉,得:Mb=11.000000100…0⑤溢出判斷:在上述階碼計(jì)算和調(diào)整過程中,沒有發(fā)生“階碼上溢”和“階碼下溢”的問題。因此,階碼Eb=10000101。最后結(jié)果為Eb=10000101,Mb=1(1).00000010…0,即:–64.5。(2)0.75–(–65.25)x ①對(duì)階:[ΔE]=[E]+[–[E]] (mod=01111110+01111011=1111x 補(bǔ) 移 移補(bǔ)ΔE=-7,根據(jù)對(duì)階規(guī)則可知需要對(duì) x進(jìn)行對(duì)階,結(jié)果為:Ex=Ey=10000110,Mx=00.000000110...000x的尾數(shù)Mx右移一位,符號(hào)不變,數(shù)值高位補(bǔ)0,隱藏位右移到小數(shù)點(diǎn)后面,最后移出的位保留②b=x–y=00000000110...000–1.000001010...000(注意小數(shù)點(diǎn)在隱藏位后)根據(jù)原碼加減法運(yùn)算規(guī)則,得:00.000000110...00011.000001010...000=01.00001000…000上式尾數(shù)中最左邊第一位是符號(hào)位,其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(加粗。③規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為1,不需要進(jìn)行規(guī)格化。④舍入:把結(jié)果的尾數(shù)Mb中最后兩位附加位舍入掉,從本例來看,不管采用什么舍入法,結(jié)果都一樣,都是把最后兩個(gè)0去掉,得:Mb=01.00001000…0⑤溢出判斷:在上述階碼計(jì)算和調(diào)整過程中,沒有發(fā)生“階碼上溢”和“階碼下溢”的問題。因此,階碼Eb=10000101。最后結(jié)果為Eb=10000101,Mb=0(1).00001000…0,即:+66。思考題:對(duì)階時(shí)發(fā)生什么情況,就可以不再繼續(xù)進(jìn)行計(jì)算?8421NBCD碼表示,采用十進(jìn)制加法運(yùn)算計(jì)算下列表達(dá)式的值,并討論在十進(jìn)制BCD碼加法運(yùn)算中如何判斷溢出。(1)234+567 (2)548+729參考答案:(1)234+567(2)548+729

001000110100+010101100111011110011011+ 0110011110100001+ 01100000100000000001 (801)100000010101001000+00000111001010010000110001110001+00000110000001100001001001110111結(jié)果為:(1277)101254811000111BCD碼加法溢出了。所以我們?cè)谂袛嗟臅r(shí)候不能僅僅看BCD499,就可以認(rèn)為是溢出了。8421NBCD673–356673加上(–356)10補(bǔ)碼實(shí)現(xiàn)。畫出實(shí)現(xiàn)上述操作的3位十進(jìn)制數(shù)的BCD參考答案:[–(356)10]補(bǔ)=011001000100011001110011+011001000100110010110111+011001100000001100010111最高位產(chǎn)生進(jìn)位,因此,結(jié)果為正數(shù):001100010111,故結(jié)果為:(+317)10電路圖分為兩部分,一個(gè)是求出模10補(bǔ)碼,另一個(gè)是計(jì)算以及判斷輸出結(jié)果的電路圖(參見教材圖3.3。求模10補(bǔ)碼的電路圖(RTL級(jí))如下:jianshu[11..0]jianshu[11..0]A[10..0]B[10..0]11'h333--Add0+Add1A[11..0]B[11..0]ADDER12'h001--+temp[11..0]ADDER計(jì)算電路圖(RTL級(jí))如下:+++++++++++<<+<++++<<第4章 習(xí) 題答案64KB,按字節(jié)編址。要求:1K×4SRAM芯片構(gòu)成該主存儲(chǔ)器,需要多少個(gè)芯片?主存地址共多少位?幾位用于選片?幾位用于片內(nèi)選址?參考答案:(1)64KB/1K×4位=64×2=128片。16位,6位選片,10位片內(nèi)選址。264CS為高電平有效。Y0Y0……Y63…1K*4CSSRAMWR1K*4CS 1K*4CSSRAM …… SRAMWR WR1K*4CSSRAMWR15…A10A9…A0D7…D0WE64K×1DRAM256K×8位的存儲(chǔ)器。要求:計(jì)算所需芯片數(shù),并畫出該存儲(chǔ)器的邏輯框圖。若采用異步刷新方式,每單元刷新間隔不超過2ms用集中刷新方式,則存儲(chǔ)器刷新一遍最少用多少讀寫周期?參考答案:(1)256KB/64K×14×832片。存儲(chǔ)器邏輯框圖見下頁(yè)(CS為高電平有效。(2)因?yàn)槊總€(gè)單元的刷新間隔為2ms,所以,采用異步刷新時(shí),在2msDRAM64K=256×256256行。因此,存儲(chǔ)2ms/256=7.8μs256個(gè)存儲(chǔ)(讀寫)周期,在這個(gè)過程中,存儲(chǔ)器不能進(jìn)行讀寫操作。Y0Y0……Y3DRAM DRAM DRAM DRAM DRAM DRAM64K*1 64K*1 64K*1 64K*1 64K*1 64K*1DRAM64K*1DRAM……DRAM64K*1 64K*1DRAM DRAM DRAM DRAM DRAM DRAM DRAM64K*1 64K*1 64K*1 64K*1 64K*1 64K*1 64K*117A16A15……A0D7…D08K×8EPROM32K×16位的只讀存儲(chǔ)器,試問:(1)數(shù)據(jù)寄存器最少應(yīng)有多少位? (2)地址寄存器最少應(yīng)有多少位?共需多少個(gè)EPROM芯片? (4)畫出該只讀存儲(chǔ)器的邏輯框圖參考答案:16位。15位(若按16位的字編址;16位(若按字節(jié)編址。(3)共需要32K×16位/8K×8位=4×2=8片。(4)該只讀存儲(chǔ)器的邏輯框圖如下(CS為高電平有效。Y0Y0……Y3……………8K*8CSEPROMWR……8K*8CS 8K*8CSEPROM …… EPROMWR WR……8K*8CSEPROMWR……14A13A12…A0D15…D8D7…D0WE0000H~7FFFHROM8K×4RAM32K×8位的地址總線為A0-A15,數(shù)據(jù)總線為D0-D7,控制信號(hào)為讀寫訪存ROMRAMCPUCPU24000000H~007FFFHROM區(qū),剩下的所有地8K×4RAM芯片配置,則需要多少個(gè)這樣的RAM芯片?參考答案:CPU160000H~FFFFH,其中,8000H~FFFFHRAM215=32K8K×432KB/8K×4位4×28片。ROMA15來區(qū)A150ROM1RAM芯片,此時(shí),根據(jù)A14A13進(jìn)行譯碼,得到4個(gè)譯碼信號(hào),分別用于4組字?jǐn)U展芯片的片選信號(hào)。(圖略,可參照?qǐng)D4.15)CPU24位,ROM000000H~007FFFH,則ROM32KB,總大小為16MB=14KB=51232KRAM區(qū)大小為51132KRAM芯片數(shù)為51132KB/8K4位=511×4×2個(gè)芯片。假定一個(gè)存儲(chǔ)器系統(tǒng)支持3,9,17,2,51,37,13,4,41,67,10,則哪些地址訪問會(huì)發(fā)生體沖突?參考答案:對(duì)于4體交叉訪問的存儲(chǔ)系統(tǒng),每個(gè)存儲(chǔ)模塊的地址分布為:Bank0:0、4、8、12、16……Bank1:1、5、9、13、17…37…41…Bank2:2、6、10、14、18……Bank3:3、7、11、15、19…51…674次訪問中出現(xiàn)在同一個(gè)Bank3717、13、84發(fā)生沖突?,F(xiàn)代計(jì)算機(jī)中,SRAMcacheDRAM用于實(shí)現(xiàn)慢速大容量的主存。以前超級(jí)計(jì)算機(jī)通常不提供cach,而是用SRAM來實(shí)現(xiàn)主存(Cray巨型機(jī)慮成本,你還這樣設(shè)計(jì)高性能計(jì)算機(jī)嗎?為什么?參考答案:不這樣做的理由主要有以下兩個(gè)方面:DRAMSRAM芯片構(gòu)成的主存容量大的多。②程序訪問的局部性特點(diǎn)使得cache的命中率很高,因而,即使主存沒有用快速的SRAM芯片而是用DRAM芯片,也不會(huì)影響到訪問速度。分別給出具有下列要求的程序或程序段的示例:對(duì)于數(shù)據(jù)的訪問,幾乎沒有時(shí)間局部性和空間局部性。對(duì)于數(shù)據(jù)的訪問,有很好的時(shí)間局部性,但幾乎沒有空間局部性。對(duì)于數(shù)據(jù)的訪問,有很好的空間局部性,但幾乎沒有時(shí)間局部性。參考答案(略:可以給出許多類似的示例。例如,對(duì)于按行優(yōu)先存放在內(nèi)存的多維數(shù)組,如果按列優(yōu)先訪問數(shù)組元素,則空間局部性就差,如果在一個(gè)循環(huán)體中某個(gè)數(shù)組元素只被訪問一次,則時(shí)間局部性就差。假定某機(jī)主存空間大小cache(有塊大小為128字節(jié),采用直接映射和全寫(write-through)方式。請(qǐng)問:主存地址如何劃分?要求說明每個(gè)字段的含義、位數(shù)和在主存地址中的位置。cache參考答案:1GB30位。cache64KB/128B=512行,因此,行索引(行號(hào))為9128字節(jié),說明塊內(nèi)地址為714位為標(biāo)志(Tag);97位為塊內(nèi)地址。因?yàn)椴捎弥苯佑成?,所以cache中無需替換算法所需控制位,全寫方式下也無需修改(位,而標(biāo)志位和有效位總是必須有的,所以,cache總?cè)萘繛?12×(128×8+14+1)=519.5K位。假定某計(jì)算機(jī)的cache共16行,開始為空,塊大小為CPU依次訪問以下地址序列:2,3,11,16,21,13,64,48,19,11,3,22,4,27,6和。要求:說明每次訪問是命中還是缺失,試計(jì)算訪問上述地址序列的命中率。cache4參考答案cache16行×1字行=161字=字號(hào)。因此,映射公式為:cache=mod16=mod。cachemiss,以下是映射關(guān)系(字號(hào)-cache行號(hào))和命中情況。2-2:miss,3-3:miss,11-11:miss,16-0:miss,21-5:miss,13-13:miss,64-0:、replace,48-0:miss、replace,19-3:、replace,11-11:hit3-3:、replace,22-6:miss,4-4:miss,27-11:miss、replace,6-6:miss、replace,11-11:miss、replace。只有一次命中!cache164個(gè)字,所以,cache44個(gè)字字號(hào)/4]。因此,映射公式為:cache號(hào)=mod4字號(hào)/4]mod。以下是映射關(guān)系(字號(hào)-主存塊號(hào)-cache行號(hào))和命中情況。2-0-0:miss,3-0-0:hit,11-2-2:miss,16-4-0:miss、replace,21-5-1、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、replace。命中4次。由此可見,塊變大后,能有效利用訪問的空間局部性,從而使命中率提高!訪問與排列順序一致,并說明為什么修改后的程序比原來的程序執(zhí)行時(shí)間短。intsum_array(inta[N][N][N]){inti,j,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í)間更短。分析比較以下三個(gè)函數(shù)的空間局部性,并指出哪個(gè)最好,哪個(gè)最差?#defineN1000typedef structintvel[3];int

#defineN1000typedef structintvel[3];int

#defineN1000typedef structintvel[3];int}point;pointp[N];voidclear1(point*p,intn)}point;pointp[N];voidclear2(point*p,intn)}point;pointp[N];voidclear3(point*p,intn){{{inti,j;inti,j;inti,j;for(i=0;i<n;i++){for(i=0;i<n;i++){for(j=0;j<3;j++){for(j=0;j<3;j++)for(j=0;j<3;j++){for(i=0;i<n;i++)p[i].vel[j]=0;p[i].vel[j]=0;p[i].vel[j]=0;for(j=0;i<3;j++)p[i].acc[j]=0;for(i=0;i<n;i++)p[i].acc[j]=0;}p[i].acc[j]=0;}}}}}}參考答案:對(duì)于函數(shù)clear1,其數(shù)組訪問順序與在內(nèi)存的存放順序完全一致,因此,空間局部性最好。int型變量(假定sizeof(int)=,則相當(dāng)于12,因此空間局部性比clear112B小的話,則大大影響命中率。6個(gè)int型變量(sizeof(int)=424B)clear224B小的話,則大大影響命中率。以下是計(jì)算兩個(gè)向量點(diǎn)積的程序段:floatdotproduct(floatx[8],floaty[8]){floatsum=0.0;inti,;for(i=0;i<8;i++)sum+=x[i]*y[i];returnsum;}要求:試分析該段代碼中數(shù)組xy的時(shí)間局部性和空間局部性,并推斷命中率的高低。cache32字節(jié),每個(gè)16sumix00000040H32yx率,要求說明每次訪問的cache命中情況。將上述(2)cache2-8則該程序數(shù)據(jù)訪問的命中率是多少?在上述(2)xfloat[12]少?參考答案:xycache1632cache2行。數(shù)x8個(gè)元素(32B)40H322個(gè)主存塊,其中x[0]~x[3]4塊,x[4]~x[7]5y8個(gè)元素(32B)6塊7塊中。所以,x[0]~x[3]y[0]~y[3]cache0行;x[4]~x[7]和y[4]~y[7]都映射到cache第1行。cache01

0-3次循環(huán)

4-7次循環(huán)x[4-7],y[4-7]每調(diào)入一塊,裝入4個(gè)數(shù)組元素,因?yàn)閤[i]和y[i]總是映射到同一行,相互淘汰對(duì)方,故每次都不命中,命中率為0.28Bcache4行,每組兩行,共兩組。x4個(gè)主存塊,x[0]~x[1]、x[2]~x[3],x[4]~x[5],x[6]~x[7]8~11塊中;y4個(gè)主存塊,y[0]~y[1]、y[2]~y[3],y[4]~y[5],y[6]~y[7]12~15塊中;cache01

第0行 第1行x[0-1],x[4-5] x[2-3],x[6-7] y[2-3],y[6-7]每調(diào)入一塊,裝入兩個(gè)數(shù)組元素,第二個(gè)數(shù)組元素的訪問總是命中,故命中率為50%。[0]~y[3]在第7塊,y[4]~x[7]在第8塊。cache 第0-3次循環(huán) 第4-7次循第0行 x[0-3] y[4-7]第1行 y[0-3] x[4-7]若(2)x1248By7塊開始,因而,x[i]和y[i就不會(huì)映射到同一個(gè)cachex[0][0]~y[3]在第7塊,y[4]~x[7]在第8塊。cache 第0-3次循環(huán) 第4-7次循第0行 x[0-3] y[4-7]第1行 y[0-3] x[4-7]4375%。以下是對(duì)矩陣進(jìn)行轉(zhuǎn)置的程序段:typedefintarray[4][4];void transpose(arraydst, arraysrc){inti,j;for(i=0;i<4;i++)for(j=0;j<4;j++)dst[j][i]=src[i][j];}假設(shè)該段程序運(yùn)行的計(jì)算機(jī)中L1datacache的數(shù)據(jù)區(qū)大小為32B16B,初始為空。數(shù)組dst0000C000Hsrc0000C040Hsrc[row][col]dst[row][col]映射到cache的哪一行,其訪問是命中hi)還是失效(mis。若L1datacache的數(shù)據(jù)區(qū)容量改為128Bsrc數(shù)組src數(shù)組dst數(shù)組32Bcol=0col=1col=2col=3col=0col=1col=2col=3row=00/miss0/miss0/hit0/miss0/miss0/miss0/miss0/missrow=11/miss1/hit1/miss1/hit1/miss1/miss1/miss1/missrow=20/miss0/miss0/hit0/miss0/miss0/miss0/miss0/missrow=31/miss1/hit1/miss1/hit1/miss1/miss1/miss1/misssrc數(shù)組 dst數(shù)組128Bcol=0col=1col=2col=3col=0col=1col=2col=3row=04/miss4/hit4/hit4/hit0/miss0/hit0/hit0/hitrow=15/miss5/hit5/hit5/hit1/miss1/hit1/hit1/hitrow=26/miss6/hit6/hit6/hit2/miss2/hit2/hit2/hitrow=37/miss7/hit7/hit7/hit3/miss3/hit3/hit3/hit參考答案:從程序來看,數(shù)組訪問過程如下:src[0]、dst[0][0]、src[0]、dst[1]、src[0]、dst[2]、src[0]、dst[3][0]src[1]、dst[0][1]、src[1]、dst[1]、src[1]、dst[2]、src[1]、dst[3][1]src[2]、dst[0][2]、src[2]、dst[1]、src[2]、dst[2]、src[2]、dst[3][2]src[3]、dst[0][3]、src[3]、dst[1]、src[3]、dst[2]、src[3]、dst[3][3]16B444cache的一行。32B時(shí),L1datacache2dst[0][i]、dst[2][i]、src[0][i]、src[2][i](i=0~3)都映射到cache0dst[1][i]、dst[3][i]、src[1][i]、src[3][i](i=0~3)cache1行。因此,從上述訪問過程來看,src[0][0]所在的一個(gè)主存塊(src[0][i](i=0~3)四個(gè)數(shù)組元素)剛調(diào)入cache后,dst[0][0]src[0][0]替換掉了。……當(dāng)數(shù)據(jù)區(qū)容量為128B時(shí),L1datacache中共有8行。數(shù)組元素dst[0][i]、dst[1][i]、dst[2][i]、dst[3][i]src[0][i]src[1][i]src[2][i]src[3][i] (i=0~3)分別映射到cache第、6、7行。因此,不會(huì)發(fā)生數(shù)組元素的替換。每次總是第一個(gè)數(shù)組元素不命中,后面三個(gè)數(shù)組元素都命中。通過對(duì)方格中每個(gè)點(diǎn)設(shè)置相應(yīng)的CMYK對(duì)一個(gè)8×8的方格中圖上黃色的功能。structpt_color{structpt_color{structpt_color{intc;intc;intc;intm;intm;intm;inty;inty;inty;intk;intk;intk;}}}structpt_colorsquare[8][8];structpt_colorquare[8][8];structpt_colorsquare[8][8];inti,j;inti,j;inti,j;for(i=0;i<8;i++){for(i=0;i<8;i++){for(i=0;i<8;i++)for(j=0;j<8;j++){for(j=0;j<8;j++){for(j=0;j<8;j++)square[i][j].c=0;square[j][i].c=0;square[i][j].y=1;square[i][j].m=0;square[j][i].m=0;for(i=0;i<8;i++)square[i][j].y=1;square[j][i].y=1;for(j=0;j<8;j++){square[i][j].k=0;square[j][i].k=0;square[i][j].c=0;}}square[i][j].m=0;}}square[i][j].k=0;}程序段A 程序段B 程序段C}假設(shè)cache的數(shù)據(jù)區(qū)大小為編譯時(shí)變量i和分配在寄存器中,數(shù)組square按行優(yōu)先方式存放在000008C0H開始的連續(xù)區(qū)域中,主存地址為32位。要求:對(duì)三個(gè)程序段A、B、C中數(shù)組訪問的時(shí)間局部性和空間局部性進(jìn)行分析比較。畫出主存中的數(shù)組元素和cache中行的對(duì)應(yīng)關(guān)系圖。計(jì)算三個(gè)程序段A、B、參考答案:對(duì)于

溫馨提示

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

評(píng)論

0/150

提交評(píng)論