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

下載本文檔

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

文檔簡介

第 1 章 習(xí) 題 答 案5.若有兩個基準(zhǔn)測試程序 P1和P2在機(jī)器M1和M2上運(yùn)行,假定M1和M2的價格分別是5000元和8000元,下表給出了P1和P2在M1和M2上所花的時間和指令條數(shù)。M1 M2程序指令條數(shù) 執(zhí)行時間(ms) 指令條數(shù) 執(zhí)行時間(ms)P1200×10610000×1065000150P2300×1033×1036420請回答下列問題:(1) 對于P1,哪臺機(jī)器的速度快?快多少?對于 P2呢?(2) 在M1上執(zhí)行P1和P2的速度分別是多少 MIPS?在M2上的執(zhí)行速度又各是多少?從執(zhí)行速度來看,對于 P2,哪臺機(jī)器的速度快?快多少?(3) 假定M1和M2的時鐘頻率各是 800MHz和1.2GHz,則在M1和M2上執(zhí)行P1時的平均時鐘周期數(shù) CPI各是多少?(4) 如果某個用戶需要大量使用程序 P1,并且該用戶主要關(guān)心系統(tǒng)的響應(yīng)時間而不是吞吐率,那么,該用戶需要大批購進(jìn)機(jī)器時,應(yīng)該選擇M1還是M2?為什么?(提示:從性價比上考慮)(5) 如果另一個用戶也需要購進(jìn)大批機(jī)器,但該用戶使用 P1和P2一樣多,主要關(guān)心的也是響應(yīng)時間,那么,應(yīng)該選擇 M1還是M2?為什么?參考答案:1)對于P1,M2比M1快一倍;對于P2,M1比M2快一倍。2)對于M1,P1的速度為:200M/10=20MIPS;P2為300k/0.003=100MIPS。對于M2,P1的速度為:150M/5=30MIPS;P2為420k/0.006=70MIPS。從執(zhí)行速度來看,對于P2,因?yàn)?00/70=1.43倍,所以M1比M2快0.43倍。3)在M1上執(zhí)行P1時的平均時鐘周期數(shù)CPI為:10×800M/(200×106)=40。在M2上執(zhí)行P1時的平均時鐘周期數(shù)CPI為:5×1.2G/(150×106)=40。4)考慮運(yùn)行P1時M1和M2的性價比,因?yàn)樵撚脩糁饕P(guān)心系統(tǒng)的響應(yīng)時間,所以性價比中的性能應(yīng)考慮執(zhí)行時間,其性能為執(zhí)行時間的倒數(shù)。故性價比R為:R=1/(執(zhí)行時間×價格)R越大說明性價比越高,也即,“執(zhí)行時間×價格”的值越小,則性價比越高。因?yàn)?0×5000>5×8000,所以,M2的性價比高。應(yīng)選擇 M2。(5)P1和P2需要同等考慮,性能有多種方式:執(zhí)行時間總和、算術(shù)平均、幾何平均。若用算術(shù)平均方式,則:因?yàn)?(10+0.003)/2×5000>(5+0.006)/2 ×8000,所以M2的性價比高,應(yīng)選擇 M2。若用幾何平均方式,則:因?yàn)?sqrt(10×0.003)×5000<sqrt(5×0.006)×8000,所以M1的性價比高,應(yīng)選擇 M1。6.若機(jī)器M1和M2具有相同的指令集,其時鐘頻率分別為 1GHz和1.5GHz。在指令集中有五種不同類型的指令 A~E。下表給出了在 M1和M2上每類指令的平均時鐘周期數(shù) CPI。機(jī)器 A B C D EM1 1 2 2 3 4M2 2 2 4 5 6請回答下列問題:(1)M1和M2的峰值MIPS各是多少?(2)假定某程序P的指令序列中,五類指令具有完全相同的指令條數(shù),則程序 P在M1和M2上運(yùn)行時,哪臺機(jī)器更快?快多少?在M1和M2上執(zhí)行程序P時的平均時鐘周期數(shù)CPI各是多少?參考答案:(1)M1上可以選擇一段都是 A類指令組成的程序,其峰值 MIPS為1000MIPS。M2上可以選擇一段A和B類指令組成的程序,其峰值 MIPS為1500/2=750MIPS。(2)5類指令具有完全相同的指令條數(shù),所以各占 20%。在M1和M2上執(zhí)行程序P時的平均時鐘周期數(shù) CPI分別為:M1 :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í)行時間分別為: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.8–2.4)/3.8 ×100%=36.8%,那么,這個結(jié)論顯然是錯誤的。請問錯在什么地方?)7.假設(shè)同一套指令集用不同的方法設(shè)計(jì)了兩種機(jī)器 M1和M2。機(jī)器M1的時鐘周期為0.8ns,機(jī)器M2的時鐘周期為1.2ns。某個程序P在機(jī)器M1上運(yùn)行時的CPI為4,在M2上的CPI為2。對于程序P來說,哪臺機(jī)器的執(zhí)行速度更快?快多少?參考答案:假設(shè)程序P的指令條數(shù)為N,則在M1和M2上的執(zhí)行時間分別為: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%。98.假設(shè)某機(jī)器M的時鐘頻率為4GHz,用戶程序P在M上的指令條數(shù)為 8×10,其CPI為1.25,則P在M上的執(zhí)行時間是多少?若在機(jī)器 M上從程序P開始啟動到執(zhí)行結(jié)束所需的時間是4秒,則P占用的CPU時間的百分比是多少?參考答案:程序P在M上的執(zhí)行時間為:1.25×8×109×1/4G=2.5s,從啟動P執(zhí)行開始到執(zhí)行結(jié)束的總時間為 4秒,其中2.5秒是P在CPU上真正的執(zhí)行時間,其他時間可能執(zhí)行操作系統(tǒng)程序或其他用戶程序。程序P占用的CPU時間的百分比為:2.5/4=62.5%。9.假定某編譯器對某段高級語言程序編譯生成兩種不同的指令序列 S1和S2,在時鐘頻率為500MHz的機(jī)器M上運(yùn)行,目標(biāo)指令序列中用到的指令類型有 A、B、C和D四類。四類指令在M上的CPI和兩個指令序列所用的各類指令條數(shù)如下表所示。A B C D各指令的CPI1234S1的指令條數(shù)5221S2的指令條數(shù) 1 1 1 5請問:S1和S2各有多少條指令?CPI各為多少?所含的時鐘周期數(shù)各為多少?執(zhí)行時間各為多少?參考答案:S1有10條指令,CPI為(5×1+2×2+2×3+1×4)/10=1.9, 所含的時鐘周期數(shù)為10×1.9=19,執(zhí)行時間為19/500M=38ns。S2有8條指令,CPI為(1×1+1×2+1×3+5×4)/8=3.25, 所含的時鐘周期數(shù)為8×3.25=26,執(zhí)行時間為26/500M=52ns。(注:從上述結(jié)果來看,對于同一個高級語言源程序,在同一臺機(jī)器上所生成的目標(biāo)程序不同,其執(zhí)行時間可能不同,而且,并不是指令條數(shù)少的目標(biāo)程序執(zhí)行時間就一定少。 )10.假定機(jī)器M的時鐘頻率為1.2GHz,某程序P在機(jī)器M上的執(zhí)行時間為 12秒鐘。對P優(yōu)化時,將其所有的乘 4指令都換成了一條左移 2位的指令,得到優(yōu)化后的程序 P’。已知在M上乘法指令的CPI為5,左移指令的CPI為2,P的執(zhí)行時間是P’執(zhí)行時間的1.2倍,則P中有多少條乘法指令被替換成了左移指令被執(zhí)行?參考答案:顯然,P’的執(zhí)行時間為 10秒,因此,P比P’多花了2秒鐘,因此,執(zhí)行時被換成左移指令的乘法指令的條數(shù)為 1.2G×2/(5–2)=800M。第二章 習(xí) 題答案3.實(shí)現(xiàn)下列各數(shù)的轉(zhuǎn)換。(1)(25.8125)=(?)=(?)8=(?)16102(2)(101101.011)2=(?)=(?)=(?)=(?)842110816(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=(0100 0101.001101110101)84213)(010110010110.0011)8421=(596.3)10?)2=(254.4CCC?)16(4)(4E.C)16=(78.75) 10=(01001110.11) 24.假定機(jī)器數(shù)為8位(1位符號,7位數(shù)值),寫出下列各二進(jìn)制數(shù)的原碼和補(bǔ)碼表示。+0.1001,–0.1001,+1.0,–1.0,+0.010100,–0.010100,+0,–0參考答案:原碼 補(bǔ)碼+0.1001: 0.1001000 0.1001000–0.1001: 1.1001000 1.0111000+1.0: 溢出 溢出–1.0: 溢出 1.0000000+0.010100: 0.0101000 0.0101000–0.010100: 1.0101000 1.1011000+0: 0.0000000 0.0000000–0:1.00000000.00000005.假定機(jī)器數(shù)為8位(1位符號,7位數(shù)值),寫出下列各二進(jìn)制數(shù)的補(bǔ)碼和移碼表示。+1001,–1001,+1,–1,+10100,–10100,+0,–0參考答案:移碼 補(bǔ)碼+1001:–1001: 01110111––10100: 01101100–6.已知[x] 補(bǔ),求 x(1)[x]補(bǔ)=1.1100111 (2)[x](3)[x]補(bǔ)=0.1010010 (4)[x]

補(bǔ)補(bǔ)參考答案:(1)[x]補(bǔ)=1.1100111 x= –0.0011001B(2)[x]補(bǔ) x= ––128(3)[x]補(bǔ)=0.1010010 x=+0.101001B(4)[x]補(bǔ) x= –101101B=–457.假定一臺32位字長的機(jī)器中帶符號整數(shù)用補(bǔ)碼表示,浮點(diǎn)數(shù)用 IEEE754標(biāo)準(zhǔn)表示,寄存器R1和R2的內(nèi)容分別為R1:0000108BH,R2:8080108BH。不同指令對寄存器進(jìn)行不同的操作,因而,不同指令執(zhí)行時寄存器內(nèi)容對應(yīng)的真值不同。假定執(zhí)行下列運(yùn)算指令時,操作數(shù)為寄存器 R1和R2的內(nèi)容,則R1和R2中操作數(shù)的真值分別為多少?(1) 無符號數(shù)加法指令(2) 帶符號整數(shù)乘法指令(3) 單精度浮點(diǎn)數(shù)減法指令參考答案:R1=0000108BH=00000000000000000001000010001011bR2=8080108BH=10000000100000000001000010001011b(1)對于無符號數(shù)加法指令, R1和R2中是操作數(shù)的無符號數(shù)表示,因此,其真值分別為R1:108BH,R2:8080108BH。(2)對于帶符號整數(shù)乘法指令, R1和R2中是操作數(shù)的帶符號整數(shù)補(bǔ)碼表示,由最高位可知,R1為正數(shù),R2為負(fù)數(shù)。R1的真值為+108BH,R2的真值為–(01111111011111111110111101110100b+1b)= –7F7FEF75H。(3)對于單精度浮點(diǎn)數(shù)減法指令, R1和R2中是操作數(shù)的 IEEE754單精度浮點(diǎn)數(shù)表示。在IEEE754標(biāo)準(zhǔn)中,單精度浮點(diǎn)數(shù)的位數(shù)為 32位,其中包含 1位符號位,8位階碼,23位尾數(shù)。由R1中的內(nèi)容可知,其符號位為 0,表示其為正數(shù),階碼為 00000000,尾數(shù)部分為00000000001000010001011 ,故其為非規(guī)格化浮點(diǎn)數(shù),指數(shù)為– 126,尾數(shù)中沒有隱藏的 1,用十六進(jìn)制表示尾數(shù)為 +0.002116H,故 R1表示的真值為+0.002116H×10-126。由R2中的內(nèi)容可知,其符號位為1,表示其為負(fù)數(shù),階碼為00000001,尾數(shù)部分為00000000001000010001011,故其為規(guī)格化浮點(diǎn)數(shù),指數(shù)為1–127=–126,尾數(shù)中有隱藏的 1,用十六進(jìn)制表示尾數(shù)為– 1.002116H,故R2表示的真值為–1.002116H×10-1268.假定機(jī)器M的字長為32位,用補(bǔ)碼表示帶符號整數(shù)。下表第一列給出了在機(jī)器 M上執(zhí)行的C語言程序中的關(guān)系表達(dá)式,請參照已有的表欄內(nèi)容完成表中后三欄內(nèi)容的填寫。關(guān)系表達(dá)式 運(yùn)算類型 結(jié)果 說明0==0U無符號整–1<0數(shù)–1<0U有符號整數(shù)–1>–2無符號整(unsigned)–1>–2數(shù)有符號整數(shù)無符號整數(shù)有符號整數(shù)有符號整數(shù)無符號整數(shù)9.以下是一個C語言程序,用來計(jì)算一個數(shù)組

1 00?0B=00?0B11?1B(–1)<00?0B(0)11?1B(232–1)>00?0B(0)1011?1B(231–1)>100?0B0(–231)1011?1B(231–1)<100?0B(231)1011?1B(231–1)>100?0B(–231)11?1B(–1)>11?10B(–2)11?1B(232–1)>11?10B(232–2)a中每個元素的和。當(dāng)參數(shù) len為0時,返回值應(yīng)該是 0,但是在機(jī)器上執(zhí)行時,卻發(fā)生了存儲器訪問異常。請問這是什么原因造成的,并說明程序應(yīng)該如何修改。1 floatsum_elements(floata[],unsignedlen)2 {3 int i;floatresult=0;6for(i=0;i<=len–1;i++)7result+=a[i];returnresult;}參考答案:參數(shù)len的類型是unsigned,所以,當(dāng)len=0時,執(zhí)行l(wèi)en-1 的結(jié)果為11?1,是最大可表示的無符號數(shù),因而,任何無符號數(shù)都比它小,使得循環(huán)體被不斷執(zhí)行,引起數(shù)組元素的訪問越界,發(fā)生存儲器訪問異常。只要將len聲明為int 型,或循環(huán)的測試條件改為 i<len。設(shè)某浮點(diǎn)數(shù)格式為:其中,移碼的偏置常數(shù)為 16,補(bǔ)碼采用一位符號位,基數(shù)為 4。(1)用這種格式表示下列十進(jìn)制數(shù): +1.7,–0.12,+19,–1/8。(2)寫出該格式浮點(diǎn)數(shù)的表示范圍,并與 12位定點(diǎn)補(bǔ)碼整數(shù)表示范圍比較。參考答案:(假定采用0舍1入法進(jìn)行舍入)(1)+1.7=+1.1011001B=0.011011B ×41, 故階碼為 1+16=17=10001B, 尾數(shù)為+0.011011的補(bǔ)碼, 即0.011011,所以+1.7表示為010001011011。–0.12=–0.000111101B=–0.011111B×4–1,故階碼為–1+16=15=01111B,尾數(shù)為–0.011111的補(bǔ)碼,即1.100001,所以–0.12表示為101111100001。+19=+10011B=0.010011B×43,故階碼為 3+16=19=10011B, 尾數(shù)為0.010011,所以+19表示為010011010011。–1/8= –0.125= –0.001B= –0.100000 ×4–1,階碼為 –1+16=1501111B,尾數(shù)為–0.100000的補(bǔ)碼,即1.100000,所以–1/8表示為101111100000。(2)該格式浮點(diǎn)數(shù)表示的范圍如下。正數(shù)最大值:0.111111B×411111,即:0.333×415(≈230≈109)正數(shù)最小值:0.000001B×400000,即:0.001×4–16(≈2–34≈10–10)負(fù)數(shù)最大值:–0.000001B×400000,即:–0.001×4–16負(fù)數(shù)最小值:–1.000000B×411111,即:–1.000×415–10 9因此,該格式浮點(diǎn)數(shù)的數(shù)量級在 10 ~10之間。12位定點(diǎn)補(bǔ)碼整數(shù)的表示范圍為:– 211~+(211–1),即:–2048~2047由此可見,定點(diǎn)數(shù)和浮點(diǎn)數(shù)的表示范圍相差非常大。下列幾種情況所能表示的數(shù)的范圍是什么?(1)16位無符號整數(shù)(2)16位原碼定點(diǎn)小數(shù)(3)16位補(bǔ)碼定點(diǎn)小數(shù)(4)16位補(bǔ)碼定點(diǎn)整數(shù)(5)下述格式的浮點(diǎn)數(shù)(基數(shù)為2,移碼的偏置常數(shù)為128)參考答案:(1)無符號整數(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ù):––7+127–7–128。(1–2)×2~–2×2正數(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.11B ×20, 故階碼為 0+127=01111111B,數(shù)符為 0,尾數(shù)為1.110?0,小數(shù)點(diǎn)前為隱藏位,所以 +1.7表示為00111111111000000000000000000000,用十六進(jìn)制表示為 3FE00000H。+19=+10011B=+1.0011B ×24?–1/8= –0.125= –0.001B= –1.0 ×2–3,階碼為–3+127=01111100B,數(shù)符為1,尾數(shù)為1.0?0,所以–1/8表示為10111110000000000000000000000000,用十六進(jìn)制表示為 BE000000H。2813.設(shè)一個變量的值為 4098,要求分別用32位補(bǔ)碼整數(shù)和IEEE754單精度浮點(diǎn)格式表示該變量(結(jié)果用十六進(jìn)制表示),并說明哪段二進(jìn)制序列在兩種表示中完全相同,為什么會相同?參考答案:124098=+1 000000000010B=+1.00000000001 ×232位2-補(bǔ)碼形式為:00000000000000000001000000000010(00001002H)000000000010粗體部分為除隱藏位外的有效數(shù)字,因此,在兩種表示中是相同的序列。參考答案:––1111111111111111111111111111111B=–1.111111111111111111111111111111 ×230位2-補(bǔ)碼形式能表示精確的值,而浮點(diǎn)數(shù)表示的是近似值,低位被截?cái)?5.下表給出了有關(guān) IEEE754浮點(diǎn)格式表示中一些重要數(shù)據(jù)的取值,表中已經(jīng)有最大規(guī)格化數(shù)的相應(yīng)內(nèi)容,要求填入其他浮點(diǎn)數(shù)的相應(yīng)內(nèi)容。 (注:表中a代表一個在 1到10之間的正純小數(shù))單精度 雙精度項(xiàng)目階碼尾數(shù)以10的冪以10的以2的冪次以2的冪次次表示的冪次表表示的值表示的值值示的值0000000001011111最大規(guī)格化數(shù) 11最小規(guī)格化數(shù) 00000001最大非規(guī)格化數(shù) 00000000最小非規(guī)格化數(shù) 00000000+∞NaN

0?.000?.001?110?.001?110?010?.00非全0

00001111(2–2–23)×a×1038(2–2–52)×a×10308212721023a×10–38a×10–3081.0×2–1261.0×2–1022a×10–38a×10–308(1–2–23)×(1–2–52)×a×10–44a×10–?2–1262–1022–––23×2–126–52–10222=22×2–––149––––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)位后的 8位編碼是01000101。e的ASCII碼為‘a(chǎn)’+(‘e’–‘a(chǎn)’)=1100001+100=1100101 ,奇校驗(yàn)位P=1, 第一位前加入奇校驗(yàn)位后的 8位編碼是11100101。f的ASCII碼為‘a(chǎn)’+(‘f’–‘a(chǎn)’)=1100001+101=1100110, 奇校驗(yàn)位P=1, 第一位前 加入奇校驗(yàn)位后的 8位編碼是11100110。7的ASCII碼為‘0’+(7-0)=0110000+111=0110111,奇校驗(yàn)位P=0,第一位前加入奇校驗(yàn)位后的8位編碼是00110111。G的ASCII碼為‘A’+(‘G’–‘A’)=1000001+0110=1000111, 奇校驗(yàn)位P=1, 第一位前加入奇校驗(yàn)位后的 8位編碼是11000111。Z的ASCII碼為‘A’+(‘Z’–‘A’)=1000001+11001=1011010, 奇校驗(yàn)位P=1, 第一位前加入奇校驗(yàn)位后的 8位編碼是11011010。5的ASCII碼為‘0’+(5–0)=0110000+101=0110101 ,奇校驗(yàn)位P=1, 第一位前加入奇校驗(yàn)位后的 8位編碼是10110101。17.假定在一個程序中定義了變量 x、y和i,其中,x和y是float 型變量(用IEEE754單精度浮點(diǎn)數(shù)表示),i是16位short 型變量(用補(bǔ)碼表示)。程序執(zhí)行到某一時刻,x=–0.125、y=7.5、i=100,它們都被寫到了主存(按字節(jié)編址),其地址分別是100,108和112。請分別畫出在大端機(jī)器和小端機(jī)器上變量 x、y和i在內(nèi)存的存放位置。參考答案:–0.125= –0.001B= –1.0×2-3x在機(jī)器內(nèi)部的機(jī)器數(shù)為: 10111110000?0(BE000000H)7.5=+111.1B=+1.111 ×22?0(40F00000H)100=64+32+4=1100100Bi在機(jī)器內(nèi)部表示的機(jī)器數(shù)為: 0000000001100100(0064H)大端機(jī) 小端機(jī)地址 內(nèi)容 內(nèi)容100 BEH 00H101 00H 00H102 00H 00H103 00H BEH108 40H 00H109 F0H 00H110 00H F0H111 00H 40H112 00H 64H113 64H 00H18.假定某計(jì)算機(jī)的總線采用奇校驗(yàn),每 8位數(shù)據(jù)有一位校驗(yàn)位,若在 32位數(shù)據(jù)線上傳輸?shù)男畔⑹?F3CAB96H,則對應(yīng)的4個校驗(yàn)位應(yīng)為什么?若接受方收到的數(shù)據(jù)信息和校驗(yàn)位分別為873CAB96H和0101B,則說明發(fā)生了什么情況,并給出驗(yàn)證過程。參考答案:傳輸信息8F3CAB96H展開為10001111001111001010101110010110 ,每8位有一個奇校驗(yàn)位,因此,總線上發(fā)送方送出的 4個校驗(yàn)位應(yīng)該分別為 0、1、0、1。接受方的數(shù)據(jù)信息為 873CAB96H,展開后為10000111001111001010101110010110;接收到的校驗(yàn)位分別為 0、1、0、1。在接受方進(jìn)行校驗(yàn)判斷如下:根據(jù)接收到的數(shù)據(jù)信息計(jì)算出 4個奇校驗(yàn)位分別為 1、1、0、1,將該4位校驗(yàn)位分別和接收到的4位校驗(yàn)位進(jìn)行異或,得到 1、0、0、0,說明數(shù)據(jù)信息的第一個字節(jié)發(fā)生傳輸錯誤。對照傳輸前、后的數(shù)據(jù)信息,第一字節(jié) 8FH變成了87H,說明確實(shí)發(fā)生了傳輸錯誤,驗(yàn)證正確。19.寫出16位數(shù)據(jù)的SEC碼。假定數(shù)據(jù)為 0101000101000110,說明SEC碼如何正確檢測數(shù)據(jù)位5的錯誤。參考答案:對于16位數(shù)據(jù), 可以如下插入校驗(yàn)位:M16M15M14M13M12P5M11M10M9M8M7M6M5P4M4M3M2P3M1P2P1其中Mi是原信息數(shù)據(jù), Pi是加入的校驗(yàn)位, 對于各個校驗(yàn)位的值可以如下計(jì)算P1=M1⊕M2⊕M3⊕M4⊕M5⊕M7⊕M9⊕M11⊕M12⊕M14⊕M16=1P2=M1⊕M3⊕M4⊕M6⊕M7⊕M10⊕M11⊕M13⊕M14=1P3=M2⊕M3⊕M4⊕M8⊕M9⊕M10⊕M11⊕M15⊕M16=0P4=M5⊕M6⊕M7⊕M8⊕M9⊕M10⊕M11=0P5=M12⊕M13⊕M14⊕M15⊕M16=0所以此時P5P4P3P2P1=00011,第五位數(shù)據(jù)出錯時,數(shù)據(jù)字變?yōu)椋?101000101010110,’ ’ ’ ’ ’P5P4P3P2P1=01010,故障字=00011⊕01010=01001,說明碼字第9位出錯,即M5出錯。20.假設(shè)要傳送的數(shù)據(jù)信息為: 100011,若約定的生成多項(xiàng)式為: G(x)=x3+1,則校驗(yàn)碼為多少?假定在接收端接收到的數(shù)據(jù)信息為 100010,說明如何正確檢測其錯誤,寫出檢測過程。參考答案:原數(shù)據(jù)信息為100011,對應(yīng)的報(bào)文多項(xiàng)式為M(x)=x5+x+1,生成多項(xiàng)式的位數(shù)為4位,所以在原數(shù)據(jù)信息后面添加’3M(x)=x8+x43用3個0,變?yōu)镸(x)=x+x,M(x)去模2除G(x),得到的余數(shù)為111,所以得到CRC碼為100011111。檢測時, 用接收到的CRC碼去模2除生成多項(xiàng)式1001,若得到的余數(shù)為 0,則表明正確,否則說明傳輸時發(fā)生了錯誤。此題中接收到的CRC碼為100010111(即數(shù)據(jù)100010加檢驗(yàn)位111),顯然,用100010111模2除1001,得到余數(shù)為001,不為0,說明傳輸時發(fā)生錯誤。第3 章 習(xí) 題答案2(4)高級語言中的運(yùn)算和機(jī)器語言(即指令)中的運(yùn)算是什么關(guān)系?假定某一個高級語言源程序P中有乘、除運(yùn)算,但機(jī)器 M中不提供乘、除運(yùn)算指令,則程序 P能否在機(jī)器M上運(yùn)行?為什么?參考答案:(略)3.考慮以下C語言程序代碼:int func1(unsignedword){return(int)((word<<24)>>24);}int func2(unsignedword){return((int)word<<24)>>24;}假設(shè)在一個32位機(jī)器上執(zhí)行這些函數(shù),該機(jī)器使用二進(jìn)制補(bǔ)碼表示帶符號整數(shù)。無符號數(shù)采用邏輯移位,帶符號整數(shù)采用算術(shù)移位。請?zhí)顚懴卤?,并說明函數(shù)func1和func2的功能。Wfunc1(w)func2(w)機(jī)器數(shù)值機(jī)器數(shù)值機(jī)器數(shù)值0000007FH1270000007FH+1270000007FH+12700000080H–1212800000080H+128FFFFFF80H8000000FFH255000000FFH+255FFFFFFFFH–100000100H25600000000H000000000H0函數(shù)func1的功能是把無符號數(shù)高 24位清零(左移24位再邏輯右移 24位),結(jié)果一定是正的有符號數(shù);而函數(shù) func2的功能是把無符號數(shù)的高 24位都變成和第25位一樣,因?yàn)樽笠?4位后進(jìn)行算術(shù)右移,高 24位補(bǔ)符號位(即第 25位)。4.填寫下表,注意對比無符號數(shù)和帶符號整數(shù)的乘法結(jié)果,以及截?cái)嗖僮髑啊⒑蟮慕Y(jié)果。模式 x y x×y(截?cái)嗲埃?x×y(截?cái)嗪螅C(jī)器 機(jī)器 機(jī)器值 值 機(jī)器數(shù) 值 值數(shù) 數(shù) 數(shù)無符號數(shù)11060102001100121004二進(jìn)制補(bǔ)110 –2 010 +2 111100 –4 100 –4碼無符號數(shù)0011111700011171117二進(jìn)制補(bǔ)001 +1 111 –1 111111 –1 111 –1碼無符號數(shù)11171117110001490011二進(jìn)制補(bǔ)111 –1 111 –1 000001 +1 001 +1碼5.以下是兩段C語言代碼,函數(shù)arith( )是直接用C語言寫的,而optarith( )是對arith( )函數(shù)以某個確定的 M和N編譯生成的機(jī)器代碼反編譯生成的。根據(jù) optarith() ,可以推斷函數(shù)arith() 中M和N的值各是多少?#define M#define Nint arith (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;”三句對應(yīng),這些語句實(shí)現(xiàn)了 x乘15的功能(左移 4位相當(dāng)于乘以16,然后再減1),因此,M等于15;y/N與“if(y<0)y+=3;y>>2; ”兩句對應(yīng),功能主要由第二句“ y右移2位”實(shí)現(xiàn),它實(shí)現(xiàn)了 y除以4的功能,因此N是4。而第一句“if(y<0)y+=3; ”主要用于對y=–1時進(jìn)行調(diào)整,若不調(diào)整,則– 1>>2=–1而–1/4=0,兩者不等;調(diào)整后–1+3=2,2>>2=0,兩者相等。思考:能否把 if(y<0)y+=3; 改成if(y<0)y+=2; ?不能!因?yàn)閥=-4 時不正確。6.設(shè)A4?A1和B4?B1分別是四位加法器的兩組輸入, C0為低位來的進(jìn)位。當(dāng)加法器分別采用串行進(jìn)位和先行進(jìn)位時,寫出四個進(jìn)位 C4?C1的邏輯表達(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)C07.用SN74181和SN74182器件設(shè)計(jì)一個16位先行進(jìn)位補(bǔ)碼加/減運(yùn)算器,畫出運(yùn)算器的邏輯框圖,并給出零標(biāo)志、進(jìn)位標(biāo)志、溢出標(biāo)志、符號標(biāo)志的生成電路。參考答案(圖略):邏輯框圖參見教材中的圖 3.15和圖3.16,將兩個圖結(jié)合起來即可,也即只要將圖 3.15中的B輸入端的每一位 Bi取反,得到 Bi,和原碼Bi一起送到一個二路選擇器,由進(jìn)位C0作為選擇控制信號。當(dāng) C0為1時做減法,此時,選擇將 Bi作為SN74181的B輸入端;否則,當(dāng)C0為1時,做加法。零標(biāo)志ZF、進(jìn)位標(biāo)志CF、溢出標(biāo)志OF、符號標(biāo)志SF的邏輯電路根據(jù)以下邏輯表達(dá)式畫出即可。ZF=F15+F14+F13+F12+F11+F10+F9+F8+F7+F6+F5+F4+F3+F2+F1+F0CF=C16OF=C0(A15B15F15+A15B15F15)+C0(A15B15F15+A15B15F15)SF=F158.用SN74181和SN74182器件設(shè)計(jì)一個32位的ALU,要求采用兩級先行進(jìn)位結(jié)構(gòu)。1)寫出所需的SN74181和SN74182芯片數(shù)。2)畫出32位ALU的邏輯結(jié)構(gòu)圖。參考答案(圖略):將如圖3.15所示的兩個16位ALU級聯(lián)起來即可,級聯(lián)時,低 16位ALU的高位進(jìn)位C16作為高16位ALU的低位進(jìn)位C0,因此,只要用8片SN74181和2片SN74182。9.已知x=10,y= –6,采用6位機(jī)器數(shù)表示。請按如下要求計(jì)算,并把結(jié)果還原成真值。1)求[x+y]補(bǔ),[x–y]補(bǔ)。2)用原碼一位乘法計(jì)算[x×y]原。3)用MBA(基4布斯)乘法計(jì)算[x×y]補(bǔ)。4)用不恢復(fù)余數(shù)法計(jì)算[x/y]原的商和余數(shù)。5)用不恢復(fù)余數(shù)法計(jì)算[x/y]補(bǔ)的商和余數(shù)。參考答案:[10]補(bǔ)=001010 [ –6]補(bǔ)=111010 ?[6]補(bǔ)=000110 [10] 原 = 001010[–6]原=100110(1)[10+(–6)] 補(bǔ)=[10] 補(bǔ)+[– 6]補(bǔ)=001010+111010=000100(+4)[10–(–6)]補(bǔ)=[10]補(bǔ)+[–(–6)]補(bǔ)=001010+000110=010000(+16)(2)先采用無符號數(shù)乘法計(jì)算 001010×000110的乘積,原碼一位乘法過程(前面兩個0省略)如下:CPY說明000000110P0=0+0000y4=0,+000000C,P和Y同時右移一位000000011得P1+1010y3=1,+X01010C,P和Y同時右移一位001010001得P2+1010y2=1,+X011110000C,P和Y同時右移一位001111000得P3+0000y1=0,+00 0111 C,P 和Y同時右移一位000111100得P4若兩個6位數(shù)相乘的話,則還要右移兩次,得 000000111100符號位為:0?1=1 ,因此,[X×Y]原=100000111100即X×Y=–111100B=–60(3)[–10]補(bǔ)=110110,布斯乘法過程如下:P Y y -1 說明000000 111010 0 設(shè)y-1=0,[P0]補(bǔ)=0y 0y-1 =00,P、Y直接右移一位0000000111010得[P1]補(bǔ)+110110y1y0=10,+[–X]補(bǔ)110110P、Y同時右移一位1110110011101得[P2]補(bǔ)+001010y2y1=01,+[X]補(bǔ)000101 P 、Y同時右移一位0000101001110得[P3]補(bǔ)+1101101001110y3y2=10,+[–X]補(bǔ)111000P、Y同時右移一位1111000100111得[P4]補(bǔ)+0000000100111y4y3=11,+0111100P、Y同時右移一位1111100010011得[P5]補(bǔ)+0000000010011y5y4=11,+0111110P、Y同時右移一位1111110001001得[P6]補(bǔ)因此,[X×Y]補(bǔ)=111111000100,即X×Y=–111100B=–60(4)因?yàn)槌ㄓ?jì)算是 2n位數(shù)除n位數(shù),所以[6]原=0110,[10]原=00001010,[–6]補(bǔ)=1010,商的符號位:0?1=1 ,運(yùn)算過程(前面兩個 0省略)如下:余數(shù)寄存器R 余數(shù)/商寄存器Q 說 明0000 1010 開始R0=X+1010R=X–Y1101010100R<0,則q4=0,沒有溢出1010101002R1(R和Q同時左移,空出一位商)+0110R2=2R+Y1101101000R<0,則q3=02011010002R(R和Q同時左移,空出一位商)+0110R3=2R2+Y110010000R3<0,則q2=0100100002R3(R和Q同時左移,空出一位商)+0110R3=2R2+Y111100000R4<0,則q1=0111000002R4(R和Q同時左移,空出一位商)+0110R5=2R4+Y010000001R>0,則q0=15商的數(shù)值部分為:00001。所以,[X/Y]原=00001(最高位為符號位),余數(shù)為0100。(5)將10和–6分別表示成補(bǔ)碼形式為: [10] 補(bǔ)=01010, [ –6]補(bǔ)=11010,計(jì)算過程如下:先對被除數(shù)進(jìn)行符號擴(kuò)展, [10] 補(bǔ)=0000001010,[6] 補(bǔ)=00110余數(shù)寄存器R余數(shù)/商寄存器Q說明0000001010開始R0=[X]+11010R=[X]+[Y]11101001010R1與[Y]同號,則q5=110100101012R1(R和Q同時左移,空出一位上商1)+00110R=2R1+[–Y]21101010101R與[Y]同號,則q=1,2410101010112R2(R和Q同時左移,空出一位上商1)+00110R3=2R2+[-Y]1101101011R3與[Y]同號,則q3=110110101112R3(R和Q同時左移,空出一位上商1)+00110 R4=2R3+[–Y]1110010111R與[Y]同號,則q2=1411001011112R(R和Q同時左移,空出一位4上商0)+00110R5=2R4+[-Y]1111101111R5與[Y]同號,則q1=1,11110111112R5(R和Q同時左移,空出一位上商1)+00110R6=2R5+[–Y]0010011110R6與[Y]異號,則q0=0,Q左移,空出一位上商1+00000+1商為負(fù)數(shù),末位加1;余數(shù)不需要修正0010011111所以,[X/Y] 補(bǔ)=11111,余數(shù)為 00100。即:X/Y=–0001B= –1,余數(shù)為0100B=4將各數(shù)代入公式“除數(shù)×商+余數(shù)=被除數(shù)”進(jìn)行驗(yàn)證,得:(–6)×(–1)+4=10。10.若一次加法需要 1ns,一次移位需要 0.5ns。請分別計(jì)算用一位乘法、兩位乘法、基于CRA的陣列乘法、基于 CSA的陣列乘法四種方式計(jì)算兩個 8位無符號二進(jìn)制數(shù)乘積時所需的時間。參考答案:一位乘法:8次右移,8次加法,共計(jì)12ns;二位乘法:4次右移,4次加法,共計(jì)6ns;基于CRA的陣列乘法:每一級部分積不僅依賴于上一級部分積,還依賴于上一級最終的進(jìn)位,而每一級進(jìn)位又是串行進(jìn)行的,所以最長的路徑總共經(jīng)過了 8+2×(8–1)=22次全加器,共計(jì)約 22ns;基于CSA的陣列乘法:本級進(jìn)位和本級和同時傳送到下一級, 同級部分積之間不相互依賴,只進(jìn)行O(N)次加法運(yùn)算,因此,共計(jì)約 8ns。11.在IEEE754浮點(diǎn)數(shù)運(yùn)算中,當(dāng)結(jié)果的尾數(shù)出現(xiàn)什么形式時需要進(jìn)行左規(guī),什么形式時需要進(jìn)行右規(guī)?如何進(jìn)行左規(guī),如何進(jìn)行右規(guī)?參考答案:對于結(jié)果為±1x.xx??x的情況,需要進(jìn)行右規(guī)。右規(guī)時,尾數(shù)右移一位,階碼加1。右規(guī)操作可以表示為:Mb?Mb×2-1,Eb?Eb+1。右規(guī)時注意以下兩點(diǎn):尾數(shù)右移時,最高位“1”被移到小數(shù)點(diǎn)前一位作為隱藏位,最后一位移出時,要考慮舍入。b)階碼加1時,直接在末位加 1。對于結(jié)果為±0.00??01x??x的情況,需要進(jìn)行左規(guī)。左規(guī)時,數(shù)值位逐次左移,階碼逐次減1,直到將第一位“1”移到小數(shù)點(diǎn)左邊。假定 k為結(jié)果中“±”和左邊第一個1之間連續(xù)0的個數(shù),則左規(guī)操作可以表示為:kMb?Mb×2,Eb?Eb–k。左規(guī)時注意以下兩點(diǎn):a)尾數(shù)左移時數(shù)值部分最左 k個0被移出,因此,相對來說,小數(shù)點(diǎn)右移了 k位。因?yàn)檫M(jìn)行尾數(shù)相加時,默認(rèn)小數(shù)點(diǎn)位置在第一個數(shù)值位(即:隱藏位)之后,所以小數(shù)點(diǎn)右移k位后被移到了第一位 1后面,這個1就是隱藏位。執(zhí)行Eb?Eb–k時,每次都在末位減1,一共減k次。12.在IEEE754浮點(diǎn)數(shù)運(yùn)算中,如何判斷浮點(diǎn)運(yùn)算的結(jié)果是否溢出?參考答案:浮點(diǎn)運(yùn)算結(jié)果是否溢出,并不以尾數(shù)溢出來判斷,而主要看階碼是否溢出。尾數(shù)溢出時,可通過右規(guī)操作進(jìn)行糾正。階碼上溢時,說明結(jié)果的數(shù)值太大,無法表示;階碼下溢時,說明結(jié)果數(shù)值太小,可以把結(jié)果近似為 0。在進(jìn)行對階、規(guī)格化、舍入和浮點(diǎn)數(shù)的乘 /除運(yùn)算等過程中,都需要對階碼進(jìn)行加、減運(yùn)算,可能會發(fā)生階碼上溢或階碼下溢,因此,必須對階碼進(jìn)行溢出判斷。(有關(guān)對階碼進(jìn)行溢出判斷的方法可參見教材中相關(guān)章節(jié)。 )13.假設(shè)浮點(diǎn)數(shù)格式為:階碼是 4位移碼,偏置常數(shù)為 8,尾數(shù)是6位補(bǔ)碼(采用雙符號位),用浮點(diǎn)運(yùn)算規(guī)則分別計(jì)算在不采用任何附加位和采用 2位附加位(保護(hù)位、舍入位)兩種情況下的值。(假定對階和右規(guī)時采用就近舍入到偶數(shù)方式)(1)(15/16) ×27+(2/16) ×25 (2)(15/16) ×27–(2/16) ×25575–(2/16)7(3)(15/16)×2+(2/16)×2(4)(15/16)×2×2參考答案(假定采用隱藏位):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) ×25=0.111100B ×25=(1.111000)2×24J1=(2/16) ×27=0.001000B ×27=(1.000000)2×24J2=(–2/16) ×27=–0.001000B×27=(–1.000000)2×24根據(jù)題目所給的各種位數(shù),可以得到在機(jī)器中表示為:[X]浮=001110(1)111000[Y1]浮=001010(1)000000[Y2]浮=111010(1)000000[K]浮=001100(1)111000[J1]浮=001100(1)000000[J2]浮=111100(1)000000所以,Ex=1110,Mx=00(1). 111000,Ey1=1010,My=00(1).000000,Ey2=1010,My=11(1).000000Ek=1100,MK=00(1). 111000,EJ1=1100,MJ1=00(1).000000,EJ2=1100,MJ2=11(1).000000尾數(shù)M中小數(shù)點(diǎn)前面有三位,前兩位為數(shù)符,表示雙符號,第三位加了括號,是隱藏位“1”。沒有附加位時的計(jì)算:(1)X+Y1[ E]補(bǔ)=[Ex]移+[–[Ey1]移]補(bǔ)(mod2n)=1110+0110=0100E=4,根據(jù)對階規(guī)則可知需要對 y1進(jìn)行對階,結(jié)果為:Ey1=Ex=1110,My1=000.000100尾數(shù)相加:Mb=Mx+My1=001.111000+000.000100=001.111100 ,兩位符號相等,數(shù)值部分最高位為 1,不需要進(jìn)行規(guī)格化,所以最后結(jié)果為:E=1110,M=00(1).111100,即(31/32)×27(2)X+Y2[ E]補(bǔ)=[Ex]移+[–[Ey2]移]補(bǔ)(mod2n)=1110+0110=0100;E=4,根據(jù)對階規(guī)則可知需要對 y2進(jìn)行對階,結(jié)果為:Ey2=Ex=1110,My2=111.111100尾數(shù)相加:Mb=Mx+My2=001.111000+111.111100=001.110100 ,兩位符號相等,數(shù)值部分最高為1,不需要進(jìn)行規(guī)格化,所以最后結(jié)果為:E=1110,M=00(1).110100,即(29/32)×27(3)K+J1[E]補(bǔ)=[EnK]移+[–[EJ1]移]補(bǔ)(mod2)=1100+0100=0000;E=0,根據(jù)對階規(guī)則可知不需要進(jìn)行對階。尾數(shù)相加:Mb=MK+MJ1=001.111000+001.000000=010.111000 ,兩位符號不等,說明尾數(shù)溢出,需要進(jìn)行右規(guī),最后結(jié)果為: E=1101,M=00(1).011100, 即(23/32)26(4)K+J2[ E]補(bǔ)=[EK]移+[–[EJ2]移]補(bǔ)(mod2n)=1100+0100=0000;E=0,根據(jù)對階規(guī)則可知不需要進(jìn)行對階。尾數(shù)相加:Mb=MK+MJ2=001.111000+111.000000=000.111000 ,兩位符號相等,數(shù)值部分最高位為 0,需要進(jìn)行左規(guī),所以最后結(jié)果為:E=1011,M=00(1).110000,即(7/8)×24如果有兩位附加位精度上會有提高,在對階的時候要注意小數(shù)點(diǎn)后就不是 6位,而是8位,最后兩位為保護(hù)位和舍入位。但是由于本題 6位尾數(shù)已經(jīng)足夠,再加 2位附加位,其結(jié)果是一樣的。14.采用IEEE754單精度浮點(diǎn)數(shù)格式計(jì)算下列表達(dá)式的值。(1)0.75+(–65.25) (2)0.75–(–65.25)參考答案:x=0.75=0.110...0B=(1.10...0)-12×2y= –65.25= –1000001.01000...0B=( –1.00000101...0) 2 ×26用IEEE754標(biāo)準(zhǔn)單精度格式表示為:[x]浮=00111111010...0[y]浮...0所以,Ex=01111110,Mx=0(1).1...0 ,EyMy=1(1).000001010...0尾數(shù)Mx和My中小數(shù)點(diǎn)前面有兩位,第一位為數(shù)符,第二位加了括號,是隱藏位“ 1”。以下是計(jì)算機(jī)中進(jìn)行浮點(diǎn)數(shù)加減運(yùn)算的過程(假定保留 2位附加位:保護(hù)位和舍入位)1)0.75+(–65.25)①對階:[ E]補(bǔ)=[Ex]移+[–[Ey]移]補(bǔ)(mod2n)=01111110+01111011=11111001E= –7,根據(jù)對階規(guī)則可知需要對 x進(jìn)行對階,結(jié)果為: Ex=EyMx=00.000000110...000x的尾數(shù)Mx右移7位,符號不變,數(shù)值高位補(bǔ) 0,隱藏位右移到小數(shù)點(diǎn)后面,最后移出的2位保留②尾數(shù)相加:Mb=Mx+My=00.000000110...000+11.000001010...000 (注意小數(shù)點(diǎn)在隱藏位后)根據(jù)原碼加 /減法運(yùn)算規(guī)則,得: 00.000000110...000+11.000001010...000=11.000000100?000上式尾數(shù)中最左邊第一位是符號位, 其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(加粗)。③規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為 1,所以不需要進(jìn)行規(guī)格化。④舍入:把結(jié)果的尾數(shù) Mb中最后兩位附加位舍入掉,從本例來看,不管采用什么舍入法,結(jié)果都一樣,都是把最后兩個 0去掉,得:Mb=11.000000100?0溢出判斷:在上述階碼計(jì)算和調(diào)整過程中,沒有發(fā)生“階碼上溢”和“階碼下溢”的問題。因此,階碼Eb=最后結(jié)果為Eb=Mb=1(1).00000010?0,即:–64.5。2)0.75–(–65.25)①對階:[ E]補(bǔ)=[Ex]移+[–[Ey]移]補(bǔ)(mod2n)=01111110+01111011=11111001=-7,根據(jù)對階規(guī)則可知需要對x進(jìn)行對階,結(jié)果為:Ex=EyMx=00.000000110...000的尾數(shù)Mx右移一位,符號不變,數(shù)值高位補(bǔ)0,隱藏位右移到小數(shù)點(diǎn)后面,最后移出的位保留②尾數(shù)相加:Mb=Mx–My=00.000000110...000 –11.000001010...000 (注意小數(shù)點(diǎn)在隱藏位后)根據(jù) 原 碼加 / 減 法 運(yùn) 算規(guī) 則, 得 :00.000000110...000 –11.000001010...000=01.000010 00?000上式尾數(shù)中最左邊第一位是符號位, 其余都是數(shù)值部分,尾數(shù)后面兩位是附加位(加粗)。③規(guī)格化:根據(jù)所得尾數(shù)的形式,數(shù)值部分最高位為 1,不需要進(jìn)行規(guī)格化。④舍入:把結(jié)果的尾數(shù) Mb中最后兩位附加位舍入掉,從本例來看,不管采用什么舍入法,結(jié)果都一樣,都是把最后兩個 0去掉,得:Mb=01.00001000?0溢出判斷:在上述階碼計(jì)算和調(diào)整過程中,沒有發(fā)生“階碼上溢”和“階碼下溢”的問題。因此,階碼Eb=最后結(jié)果為EbMb=0(1).000010 00?0,即:+66。思考題:對階時發(fā)生什么情況,就可以不再繼續(xù)進(jìn)行計(jì)算?15.假定十進(jìn)制數(shù)用 8421NBCD碼表示,采用十進(jìn)制加法運(yùn)算計(jì)算下列表達(dá)式的值,并討論在十進(jìn)制BCD碼加法運(yùn)算中如何判斷溢出。(1)234+567 (2)548+729參考答案:(1)234+567001000110100010101100111011110011011011001111010000101100000100000000001 結(jié)果為:(801)10(2)548+72900000101010010000000011100101001000011000111000100000110000001100001001001110111結(jié)果為:(1277)10在第(2)題中,如果是采用 12位數(shù)表示加數(shù)548和729,則能看出最后得到的答案是110001110111,這時就是 BCD碼加法溢出了。所以我們在判斷的時候不能僅僅看BCD碼最高位是不是丟失,而要看結(jié)果的最高4位是不是大于9,如果大于9,就可以認(rèn)為是溢出了。16.假定十進(jìn)制數(shù)用 8421NBCD碼表示,十進(jìn)制運(yùn)算 673–356可以采用673加上(–356)的模10補(bǔ)碼實(shí)現(xiàn)。畫出實(shí)現(xiàn)上述操作的 3位十進(jìn)制數(shù)的BCD碼減法運(yùn)算線路,列出線路中所有的輸入變量和輸出變量。參考答案:[–(356) 10]補(bǔ)=011001000100011001110011011001000100110010110111011001100000001100010111最高位產(chǎn)生進(jìn)位,因此,結(jié)果為正數(shù): 001100010111,故結(jié)果為:(+317)10電路圖分為兩部分,一個是求出模 10補(bǔ)碼,另一個是計(jì)算以及判斷輸出結(jié)果的電路圖(參見教材圖3.33)。求模10補(bǔ)碼的電路圖(RTL級)如下:計(jì)算電路圖(RTL級)如下:第4章習(xí)題答案已知某機(jī)主存空間大小為64KB,按字節(jié)編址。要求:(1)若用1K×4位的SRAM芯片構(gòu)成該主存儲器,需要多少個芯片?(2)主存地址共多少位?幾位用于選片?幾位用于片內(nèi)選址?(3)畫出該存儲器的邏輯框圖。參考答案:(1)64KB/1K×4位=64×2=128片。(2)因?yàn)槭前醋止?jié)編址,所以主存地址共 16位,6位選片,10位片內(nèi)選址。(3)顯然,位方向上擴(kuò)展了 2倍,字方向擴(kuò)展了 64倍。下圖中片選信號 CS為高電平有效。用64K×1位的DRAM芯片構(gòu)成256K×8位的存儲器。要求:1)計(jì)算所需芯片數(shù),并畫出該存儲器的邏輯框圖。(2)若采用異步刷新方式,每單元刷新間隔不超過 2ms,則產(chǎn)生刷新信號的間隔是多少時間?若采用集中刷新方式,則存儲器刷新一遍最少用多少讀寫周期?參考答案:(1)256KB/64K×1位

=4×8=32

片。存儲器邏輯框圖見下頁(圖中片選信號

CS為高電平有效)。2)因?yàn)槊總€單元的刷新間隔為2ms,所以,采用異步刷新時,在2ms內(nèi)每行必須被刷新一次,且僅被刷新一次。因?yàn)镈RAM芯片存儲陣列為64K=256×256,所以一共有256行。因此,存儲器控制器必須每隔 2ms/256=7.8μs產(chǎn)生一次刷新信號。采用集中刷新方式時,整個存儲器刷新一遍需要 256個存儲(讀寫)周期,在這個過程中,存儲器不能進(jìn)行讀寫操作。用8K×8位的EPROM芯片組成32K×16位的只讀存儲器,試問:(1)數(shù)據(jù)寄存器最少應(yīng)有多少位? (2)地址寄存器最少應(yīng)有多少位?(3)共需多少個EPROM芯片? (4)畫出該只讀存儲器的邏輯框圖。參考答案:(1)數(shù)據(jù)寄存器最少有 16位。(2)地址寄存器最少有: 15位(若按16位的字編址);16位(若按字節(jié)編址)。(3)共需要 32K×16位/8K×8位=4×2=8片。(4)該只讀存儲器的邏輯框圖如下(假定按字編址,圖中片選信號CS為高電平有效)。某計(jì)算機(jī)中已配有0000H~7FFFH的ROM區(qū)域,現(xiàn)在再用8K×4位的RAM芯片形成32K×8位的存儲區(qū)域,CPU地址總線為A0-A15,數(shù)據(jù)總線為D0-D7,控制信號為R/W#(讀/寫)、MREQ#(訪存)。要求說明地址譯碼方案,并畫出ROM芯片、RAM芯片與CPU之間的連接圖。假定上述其他條件不變,只是 CPU地址線改為24根,地址范圍000000H~007FFFH為ROM區(qū),剩下的所有地址空間都用 8K×4位的RAM芯片配置,則需要多少個這樣的RAM芯片?參考答案:CPU地址線共 16位,故存儲器地址空間為 0000H~FFFFH,其中,8000H~FFFFH為RAM區(qū),共215=32K個單元,其空間大小為32KB,故需8K×4位的芯片數(shù)為32KB/8K×4位=4×2=8片。因?yàn)镽OM區(qū)在0000H~7FFFH,RAM區(qū)在8000H~FFFFH,所以可通過最高位地址 A15來區(qū)分,當(dāng)A15為0時選中ROM芯片;為1時選中RAM芯片,此時,根據(jù) A14和A13進(jìn)行譯碼,得到4個譯碼信號,分別用于4組字?jǐn)U展芯片的片選信號。(圖略,可參照圖4.15)若CPU地址線為24位,ROM區(qū)為000000H~007FFFH,則ROM區(qū)大小為32KB,總大14小為16MB=2KB=512×32KB,所以 RAM區(qū)大小為511×32KB,共需使用 RAM芯片數(shù)為511×32KB/8K×4位=511×4×2個芯片。假定一個存儲器系統(tǒng)支持4體交叉存取,某程序執(zhí)行過程中訪問地址序列為3,9,17,2,51,37,13,4,8,41,67,10 ,則哪些地址訪問會發(fā)生體沖突?參考答案:對于4體交叉訪問的存儲系統(tǒng),每個存儲模塊的地址分布為: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?67如果給定的訪存地址在相鄰的 4次訪問中出現(xiàn)在同一個 Bank內(nèi),就會發(fā)生訪存沖突。所以,17和9、37和17、13和37、8和4發(fā)生沖突?,F(xiàn)代計(jì)算機(jī)中,SRAM一般用于實(shí)現(xiàn)快速小容量的cache,而DRAM用于實(shí)現(xiàn)慢速大容量的主存。以前超級計(jì)算機(jī)通常不提供cache,而是用SRAM來實(shí)現(xiàn)主存(如,Cray巨型機(jī)),請問:如果不考慮成本,你還這樣設(shè)計(jì)高性能計(jì)算機(jī)嗎?為什么?參考答案:不這樣做的理由主要有以下兩個方面:主存越大越好,主存大,缺頁率降低,因而減少了訪問磁盤所需的時間。顯然用DRAM芯片比用SRAM芯片構(gòu)成的主存容量大的多。程序訪問的局部性特點(diǎn)使得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ù)組元素只被訪問一次,則時間局部性就差。假定某機(jī)主存空間大小1GB,按字節(jié)編址。cache的數(shù)據(jù)區(qū)(即不包括標(biāo)記、有效位等存儲區(qū))有64KB,塊大小為128字節(jié),采用直接映射和全寫(write-through)方式。請問:1)主存地址如何劃分?要求說明每個字段的含義、位數(shù)和在主存地址中的位置。2)cache的總?cè)萘繛槎嗌傥唬繀⒖即鸢福海?)主存空間大小為 1GB,按字節(jié)編址,說明主存地址為 30位。cache共有64KB/128B=512行,因此,行索引(行號)為 9位;塊大小128字節(jié),說明塊內(nèi)地址為7位。因此,30位主存地址中,高 14位為標(biāo)志(Tag);中間9位為行索引;低7位為塊內(nèi)地址。(2)因?yàn)椴捎弥苯佑成?,所?cache中無需替換算法所需控制位,全寫方式下也無需修改(dirty )位,而標(biāo)志位和有效位總是必須有的,所以, cache總?cè)萘繛?12×(128×8+14+1)=519.5K位。假定某計(jì)算機(jī)的cache共16行,開始為空,塊大小為1個字,采用直接映射方式。CPU執(zhí)行某程序時,依次訪問以下地址序列:2,3,11,16,21,13,64,48,19,11,3,22,4,27,6和11。要求:(1)說明每次訪問是命中還是缺失,試計(jì)算訪問上述地址序列的命中率。(2)若cache數(shù)據(jù)區(qū)容量不變,而塊大小改為4個字,則上述地址序列的命中情況又如何?參考答案(1) cache采用直接映射方式,其數(shù)據(jù)區(qū)容量為 16行×1字/行=16字;主存被劃分成1字/塊,所以,主存塊號=字號。因此,映射公式為:cache行號=主存塊號mod16=字號mod16。開始cache為空,所以第一次都是 miss,以下是映射關(guān)系(字號-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、replace。只有一次命中?。?)cache采用直接映射方式,數(shù)據(jù)區(qū)容量不變,為 16個字,每塊大小為 4個字,所以,cache共有4行;主存被劃分為 4個字/塊,所以,主存塊號 =[字號/4]。因此,映射公式為:cache行號= 主存塊號mod4=[ 字號/4]mod4。以下是映射關(guān)系(字號 -主存塊號-cache行號)和命中情況。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次。由此可見,塊變大后,能有效利用訪問的空間局部性,從而使命中率提高!假定數(shù)組元素在主存按從左到右的下標(biāo)順序存放。試改變下列函數(shù)中循環(huán)的順序,使得其數(shù)組元素的訪問與排列順序一致,并說明為什么修改后的程序比原來的程序執(zhí)行時間短。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ù)的空間局部性,并指出哪個最好,哪個最差?#defineN1000 #defineN1000 #define

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論