首页 计算机组成与系统结构课后练习及解析

计算机组成与系统结构课后练习及解析

举报
开通vip

计算机组成与系统结构课后练习及解析第1章习题答案5.若有两个基准测试程序P1和P2在机器M1和M2上运行,假定M1和M2的价格分别是5000元和8000元,下表给出了P1和P2在M1和M2上所花的时间和指令条数。 程序 M1 M2 指令条数 执行时间(ms) 指令条数 执行时间(ms) P1 200×106 10000 150×106 5000 P2 300×103 3 420×103 6请回答下列问题:对于P1,哪台机器的速度快?快多少?对于P2呢?在M1上执行P1和P2的速度分别是多少MIPS?...

计算机组成与系统结构课后练习及解析
第1章习 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 答案5.若有两个基准测试程序P1和P2在机器M1和M2上运行,假定M1和M2的价格分别是5000元和8000元,下表给出了P1和P2在M1和M2上所花的时间和指令条数。 程序 M1 M2 指令条数 执行时间(ms) 指令条数 执行时间(ms) P1 200×106 10000 150×106 5000 P2 300×103 3 420×103 6请回答下列问题:对于P1,哪台机器的速度快?快多少?对于P2呢?在M1上执行P1和P2的速度分别是多少MIPS?在M2上的执行速度又各是多少?从执行速度来看,对于P2,哪台机器的速度快?快多少?假定M1和M2的时钟频率各是800MHz和1.2GHz,则在M1和M2上执行P1时的平均时钟周期数CPI各是多少?如果某个用户需要大量使用程序P1,并且该用户主要关心系统的响应时间而不是吞吐率,那么,该用户需要大批购进机器时,应该选择M1还是M2?为什么?(提示:从性价比上考虑)如果另一个用户也需要购进大批机器,但该用户使用P1和P2一样多,主要关心的也是响应时间,那么,应该选择M1还是M2?为什么?参考答案:对于P1,M2比M1快一倍;对于P2,M1比M2快一倍。对于M1,P1的速度为:200M/10=20MIPS;P2为300k/0.003=100MIPS。对于M2,P1的速度为:150M/5=30MIPS;P2为420k/0.006=70MIPS。从执行速度来看,对于P2,因为100/70=1.43倍,所以M1比M2快0.43倍。在M1上执行P1时的平均时钟周期数CPI为:10×800M/(200×106)=40。在M2上执行P1时的平均时钟周期数CPI为:5×1.2G/(150×106)=40。考虑运行P1时M1和M2的性价比,因为该用户主要关心系统的响应时间,所以性价比中的性能应考虑执行时间,其性能为执行时间的倒数。故性价比R为:R=1/(执行时间×价格)R越大说明性价比越高,也即,“执行时间×价格”的值越小,则性价比越高。因为10×5000>5×8000,所以,M2的性价比高。应选择M2。P1和P2需要同等考虑,性能有多种方式:执行时间总和、算术平均、几何平均。若用算术平均方式,则:因为(10+0.003)/2×5000>(5+0.006)/2×8000,所以M2的性价比高,应选择M2。若用几何平均方式,则:因为sqrt(10×0.003)×5000<sqrt(5×0.006)×8000,所以M1的性价比高,应选择M1。6.若机器M1和M2具有相同的指令集,其时钟频率分别为1GHz和1.5GHz。在指令集中有五种不同类型的指令A~E。下表给出了在M1和M2上每类指令的平均时钟周期数CPI。 机器 A B C D E M1 1 2 2 3 4 M2 2 2 4 5 6请回答下列问题:(1)M1和M2的峰值MIPS各是多少?(2)假定某程序P的指令序列中,五类指令具有完全相同的指令条数,则程序P在M1和M2上运行时,哪台机器更快?快多少?在M1和M2上执行程序P时的平均时钟周期数CPI各是多少?参考答案:(1)M1上可以选择一段都是A类指令组成的程序,其峰值MIPS为1000MIPS。M2上可以选择一段A和B类指令组成的程序,其峰值MIPS为1500/2=750MIPS。(2)5类指令具有完全相同的指令条数,所以各占20%。在M1和M2上执行程序P时的平均时钟周期数CPI分别为:M1:20%×(1+2+2+3+4)=0.2×12=2.4M2:20%×(2+2+4+5+6)=0.2×19=3.8假设程序P的指令条数为N,则在M1和M2上的执行时间分别为:M1:2.4×N×1/1G=2.4N(ns)M2:3.8×N×1/1.5G=2.53N(ns)M1执行P的速度更快,每条指令平均快0.13ns,也即M1比M2快0.13/2.53×100%≈5%。(思考:如果说程序P在M1上执行比M2上快(3.8–2.4)/3.8×100%=36.8%,那么,这个结论显然是错误的。请问错在什么地方?)7.假设同一套指令集用不同的方法设计了两种机器M1和M2。机器M1的时钟周期为0.8ns,机器M2的时钟周期为1.2ns。某个程序P在机器M1上运行时的CPI为4,在M2上的CPI为2。对于程序P来说,哪台机器的执行速度更快?快多少?参考答案:假设程序P的指令条数为N,则在M1和M2上的执行时间分别为:M1:4N×0.8=3.2N(ns)M2:2N×1.2=2.4N(ns)所以,M2执行P的速度更快,每条指令平均快0.8ns,比M1快0.8/3.2×100%=25%。8.假设某机器M的时钟频率为4GHz,用户程序P在M上的指令条数为8×109,其CPI为1.25,则P在M上的执行时间是多少?若在机器M上从程序P开始启动到执行结束所需的时间是4秒,则P占用的CPU时间的百分比是多少?参考答案:程序P在M上的执行时间为:1.25×8×109×1/4G=2.5s,从启动P执行开始到执行结束的总时间为4秒,其中2.5秒是P在CPU上真正的执行时间,其他时间可能执行操作系统程序或其他用户程序。程序P占用的CPU时间的百分比为:2.5/4=62.5%。9.假定某编译器对某段高级语言程序编译生成两种不同的指令序列S1和S2,在时钟频率为500MHz的机器M上运行,目标指令序列中用到的指令类型有A、B、C和D四类。四类指令在M上的CPI和两个指令序列所用的各类指令条数如下表所示。 A B C D 各指令的CPI 1 2 3 4 S1的指令条数 5 2 2 1 S2的指令条数 1 1 1 5请问:S1和S2各有多少条指令?CPI各为多少?所含的时钟周期数各为多少?执行时间各为多少?参考答案:S1有10条指令,CPI为(5×1+2×2+2×3+1×4)/10=1.9,所含的时钟周期数为10×1.9=19,执行时间为19/500M=38ns。S2有8条指令,CPI为(1×1+1×2+1×3+5×4)/8=3.25,所含的时钟周期数为8×3.25=26,执行时间为26/500M=52ns。(注:从上述结果来看,对于同一个高级语言源程序,在同一台机器上所生成的目标程序不同,其执行时间可能不同,而且,并不是指令条数少的目标程序执行时间就一定少。)10.假定机器M的时钟频率为1.2GHz,某程序P在机器M上的执行时间为12秒钟。对P优化时,将其所有的乘4指令都换成了一条左移2位的指令,得到优化后的程序P’。已知在M上乘法指令的CPI为5,左移指令的CPI为2,P的执行时间是P’执行时间的1.2倍,则P中有多少条乘法指令被替换成了左移指令被执行?参考答案:显然,P’的执行时间为10秒,因此,P比P’多花了2秒钟,因此,执行时被换成左移指令的乘法指令的条数为1.2G×2/(5–2)=800M。第二章习题答案3.实现下列各数的转换。(25.8125)10=(?)2=(?)8=(?)16(101101.011)2=(?)10=(?)8=(?)16=(?)8421(010110010110.0011)8421=(?)10=(?)2=(?)16(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)24.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码和补码表示。+0.1001,–0.1001,+1.0,–1.0,+0.010100,–0.010100,+0,–0参考答案:原码补码+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.00000005.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码表示。+1001,–1001,+1,–1,+10100,–10100,+0,–0参考答案:移码补码+1001:1000100100001001–1001:0111011111110111+1:1000000100000001–1:01111111111111111+10100:1001010000010100–10100:0110110011101100+0:1000000000000000–0:10000000000000006.已知[x]补,求x(1)[x]补=1.1100111(2)[x]补=10000000(3)[x]补=0.1010010(4)[x]补=11010011参考答案:(1)[x]补=1.1100111x=–0.0011001B(2)[x]补=10000000x=–10000000B=–128(3)[x]补=0.1010010x=+0.101001B(4)[x]补=11010011x=–101101B=–457.假定一台32位字长的机器中带符号整数用补码表示,浮点数用IEEE754标准表示,寄存器R1和R2的内容分别为R1:0000108BH,R2:8080108BH。不同指令对寄存器进行不同的操作,因而,不同指令执行时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器R1和R2的内容,则R1和R2中操作数的真值分别为多少?无符号数加法指令带符号整数乘法指令单精度浮点数减法指令参考答案:R1=0000108BH=00000000000000000001000010001011bR2=8080108BH=10000000100000000001000010001011b(1)对于无符号数加法指令,R1和R2中是操作数的无符号数表示,因此,其真值分别为R1:108BH,R2:8080108BH。(2)对于带符号整数乘法指令,R1和R2中是操作数的带符号整数补码表示,由最高位可知,R1为正数,R2为负数。R1的真值为+108BH,R2的真值为–(01111111011111111110111101110100b+1b)=–7F7FEF75H。(3)对于单精度浮点数减法指令,R1和R2中是操作数的IEEE754单精度浮点数表示。在IEEE754标准中,单精度浮点数的位数为32位,其中包含1位符号位,8位阶码,23位尾数。由R1中的内容可知,其符号位为0,表示其为正数,阶码为00000000,尾数部分为00000000001000010001011,故其为非规格化浮点数,指数为–126,尾数中没有隐藏的1,用十六进制表示尾数为+0.002116H,故R1表示的真值为+0.002116H×10-126。由R2中的内容可知,其符号位为1,表示其为负数,阶码为00000001,尾数部分为00000000001000010001011,故其为规格化浮点数,指数为1–127=–126,尾数中有隐藏的1,用十六进制表示尾数为–1.002116H,故R2表示的真值为–1.002116H×10-1268.假定机器M的字长为32位,用补码表示带符号整数。下表第一列给出了在机器M上执行的C语言程序中的关系表达式,请参照已有的表栏内容完成表中后三栏内容的填写。 关系表达式 运算类型 结果 说明 0==0U–1<0–1<0U2147483647>–2147483647–12147483647U>–2147483647–12147483647>(int)2147483648U–1>–2(unsigned)–1>–2 无符号整数有符号整数无符号整数有符号整数无符号整数有符号整数有符号整数无符号整数 11010111 00…0B=00…0B11…1B(–1)<00…0B(0)11…1B(232–1)>00…0B(0)011…1B(231–1)>100…0B(–231)011…1B(231–1)<100…0B(231)011…1B(231–1)>100…0B(–231)11…1B(–1)>11…10B(–2)11…1B(232–1)>11…10B(232–2)9.以下是一个C语言程序,用来计算一个数组a中每个元素的和。当参数len为0时,返回值应该是0,但是在机器上执行时,却发生了存储器访问异常。请问这是什么原因造成的,并说明程序应该如何修改。1floatsum_elements(floata[],unsignedlen)2{3inti;4floatresult=0;56for(i=0;i<=len–1;i++)7result+=a[i];8returnresult;9}参考答案:参数len的类型是unsigned,所以,当len=0时,执行len-1的结果为11…1,是最大可表示的无符号数,因而,任何无符号数都比它小,使得循环体被不断执行,引起数组元素的访问越界,发生存储器访问异常。只要将len声明为int型,或循环的测试条件改为i<len。10.设某浮点数格式为:其中,移码的偏置常数为16,补码采用一位符号位,基数为4。用这种格式表示下列十进制数:+1.7,–0.12,+19,–1/8。写出该格式浮点数的表示范围,并与12位定点补码整数表示范围比较。参考答案:(假定采用0舍1入法进行舍入)(1)+1.7=+1.1011001B=0.011011B×41,故阶码为1+16=17=10001B,尾数为+0.011011的补码,即0.011011,所以+1.7表示为010001011011。–0.12=–0.000111101B=–0.011111B×4–1,故阶码为–1+16=15=01111B,尾数为–0.011111的补码,即1.100001,所以–0.12表示为101111100001。+19=+10011B=0.010011B×43,故阶码为3+16=19=10011B,尾数为0.010011,所以+19表示为010011010011。–1/8=–0.125=–0.001B=–0.100000×4–1,阶码为–1+16=15=01111B,尾数为–0.100000的补码,即1.100000,所以–1/8表示为101111100000。(2)该格式浮点数表示的范围如下。正数最大值:0.111111B×411111,即:0.333×415(≈230≈109)正数最小值:0.000001B×400000,即:0.001×4–16(≈2–34≈10–10)负数最大值:–0.000001B×400000,即:–0.001×4–16负数最小值:–1.000000B×411111,即:–1.000×415因此,该格式浮点数的数量级在10–10~109之间。12位定点补码整数的表示范围为:–211~+(211–1),即:–2048~2047由此可见,定点数和浮点数的表示范围相差非常大。11.下列几种情况所能表示的数的范围是什么?16位无符号整数16位原码定点小数16位补码定点小数16位补码定点整数下述格式的浮点数(基数为2,移码的偏置常数为128)参考答案:(1)无符号整数:0~216–1。(2)原码定点小数:–(1–2–15)~+(1–2–15)。(3)补码定点小数:–1~+(1–2–15)。(4)补码定点整数:–32768~+32767。(5)浮点数:负数:–(1–2–7)×2+127~–2–7×2–128。正数:+2–135~(1–2–7)×2+127。12.以IEEE754单精度浮点数格式表示下列十进制数。+1.75,+19,–1/8,258参考答案:+1.75=+1.11B=1.11B×20,故阶码为0+127=01111111B,数符为0,尾数为1.110…0,小数点前为隐藏位,所以+1.7表示为00111111111000000000000000000000,用十六进制表示为3FE00000H。+19=+10011B=+1.0011B×24,故阶码为4+127=10000011B,数符为0,尾数为1.00110…0,所以+19表示为01000001100110000000000000000000,用十六进制表示为41980000H。–1/8=–0.125=–0.001B=–1.0×2–3,阶码为–3+127=01111100B,数符为1,尾数为1.0…0,所以–1/8表示为10111110000000000000000000000000,用十六进制表示为BE000000H。258=100000010B=1.0000001B×28,故阶码为8+127=10000111B,数符为0,尾数为1.0000001,所以258表示为01000011100000010000000000000000,用十六进制表示为43810000H。13.设一个变量的值为4098,要求分别用32位补码整数和IEEE754单精度浮点格式表示该变量(结果用十六进制表示),并说明哪段二进制序列在两种表示中完全相同,为什么会相同?参考答案:4098=+1000000000010B=+1.00000000001×21232位2-补码形式为:00000000000000000001000000000010(00001002H)IEEE754单精度格式为:01000101100000000001000000000000(45801000H)粗体部分为除隐藏位外的有效数字,因此,在两种表示中是相同的序列。14.设一个变量的值为–2147483647,要求分别用32位补码整数和IEEE754单精度浮点格式表示该变量(结果用十六进制表示),并说明哪种表示其值完全精确,哪种表示的是近似值。参考答案:–2147483647=–1111111111111111111111111111111B=–1.111111111111111111111111111111×23032位2-补码形式为:10000000000000000000000000000001(80000001H)IEEE754单精度格式为:11001110111111111111111111111111(CEFFFFFFH)32位2-补码形式能表示精确的值,而浮点数表示的是近似值,低位被截断15.下表给出了有关IEEE754浮点格式表示中一些重要数据的取值,表中已经有最大规格化数的相应内容,要求填入其他浮点数的相应内容。(注:表中a代表一个在1到10之间的正纯小数) 项目 阶码 尾数 单精度 双精度 以2的幂次表示的值 以10的幂次表示的值 以2的幂次表示的值 以10的幂次表示的值 01最大规格化数最小规格化数最大非规格化数最小非规格化数+∞NaN 0000000001111111111111100000000100000000000000001111111111111111 0….000….001…110….001…110…010….00非全0 01(2–2–23)×21271.0×2–126(1–2–23)×2–1262–23×2–126=2–149–– 01a×1038a×10–38a×10–38a×10–44–– 01(2–2–52)×210231.0×2–1022(1–2–52)×2–10222–52×2–1022–– 01a×10308a×10–308a×10–308a×10–?––16.已知下列字符编码:A=1000001,a=1100001,0=0110000,求E、e、f、7、G、Z、5的7位ACSII码和第一位前加入奇校验位后的8位编码。参考答案:E的ASCII码为‘A’+(‘E’–‘A’)=1000001+100=1000101,奇校验位P=0,第一位前加入奇校验位后的8位编码是01000101。e的ASCII码为‘a’+(‘e’–‘a’)=1100001+100=1100101,奇校验位P=1,第一位前加入奇校验位后的8位编码是11100101。f的ASCII码为‘a’+(‘f’–‘a’)=1100001+101=1100110,奇校验位P=1,第一位前加入奇校验位后的8位编码是11100110。7的ASCII码为‘0’+(7-0)=0110000+111=0110111,奇校验位P=0,第一位前加入奇校验位后的8位编码是00110111。G的ASCII码为‘A’+(‘G’–‘A’)=1000001+0110=1000111,奇校验位P=1,第一位前加入奇校验位后的8位编码是11000111。Z的ASCII码为‘A’+(‘Z’–‘A’)=1000001+11001=1011010,奇校验位P=1,第一位前加入奇校验位后的8位编码是11011010。5的ASCII码为‘0’+(5–0)=0110000+101=0110101,奇校验位P=1,第一位前加入奇校验位后的8位编码是10110101。17.假定在一个程序中定义了变量x、y和i,其中,x和y是float型变量(用IEEE754单精度浮点数表示),i是16位short型变量(用补码表示)。程序执行到某一时刻,x=–0.125、y=7.5、i=100,它们都被写到了主存(按字节编址),其地址分别是100,108和112。请分别画出在大端机器和小端机器上变量x、y和i在内存的存放位置。参考答案:–0.125=–0.001B=–1.0×2-3x在机器内部的机器数为:10111110000…0(BE000000H)7.5=+111.1B=+1.111×22y在机器内部的机器数为:01000000111100…0(40F00000H)100=64+32+4=1100100Bi在机器内部表示的机器数为:0000000001100100(0064H)大端机小端机地址内容内容100BEH00H10100H00H10200H00H10300HBEH10840H00H109F0H00H11000HF0H11100H40H11200H64H11364H00H18.假定某计算机的总线采用奇校验,每8位数据有一位校验位,若在32位数据线上传输的信息是8F3CAB96H,则对应的4个校验位应为什么?若接受方收到的数据信息和校验位分别为873CAB96H和0101B,则说明发生了什么情况,并给出验证过程。参考答案:传输信息8F3CAB96H展开为10001111001111001010101110010110,每8位有一个奇校验位,因此,总线上发送方送出的4个校验位应该分别为0、1、0、1。接受方的数据信息为873CAB96H,展开后为10000111001111001010101110010110;接收到的校验位分别为0、1、0、1。在接受方进行校验判断如下:根据接收到的数据信息计算出4个奇校验位分别为1、1、0、1,将该4位校验位分别和接收到的4位校验位进行异或,得到1、0、0、0,说明数据信息的第一个字节发生传输错误。对照传输前、后的数据信息,第一字节8FH变成了87H,说明确实发生了传输错误,验证正确。19.写出16位数据的SEC码。假定数据为0101000101000110,说明SEC码如何正确检测数据位5的错误。参考答案:对于16位数据,可以如下插入校验位:M16M15M14M13M12P5M11M10M9M8M7M6M5P4M4M3M2P3M1P2P1其中Mi是原信息数据,Pi是加入的校验位,对于各个校验位的值可以如下计算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,第五位数据出错时,数据字变为:0101000101010110,P5’P4’P3’P2’P1’=01010,故障字=00011⊕01010=01001,说明码字第9位出错,即M5出错。20.假设要传送的数据信息为:100011,若约定的生成多项式为:G(x)=x3+1,则校验码为多少?假定在接收端接收到的数据信息为100010,说明如何正确检测其错误,写出检测过程。参考答案:原数据信息为100011,对应的报文多项式为M(x)=x5+x+1,生成多项式的位数为4位,所以在原数据信息后面添加3个0,变为M’(x)=x3M(x)=x8+x4+x3,用M(x)去模2除G(x),得到的余数为111,所以得到CRC码为100011111。检测时,用接收到的CRC码去模2除生成多项式1001,若得到的余数为0,则表明正确,否则说明传输时发生了错误。此题中接收到的CRC码为100010111(即数据100010加检验位111),显然,用100010111模2除1001,得到余数为001,不为0,说明传输时发生错误。第3章习题答案2(4)高级语言中的运算和机器语言(即指令)中的运算是什么关系?假定某一个高级语言源程序P中有乘、除运算,但机器M中不提供乘、除运算指令,则程序P能否在机器M上运行?为什么?参考答案:(略)3.考虑以下C语言程序代码:intfunc1(unsignedword){return(int)((word<<24)>>24);}intfunc2(unsignedword){return((int)word<<24)>>24;}假设在一个32位机器上执行这些函数,该机器使用二进制补码表示带符号整数。无符号数采用逻辑移位,带符号整数采用算术移位。请填写下表,并说明函数func1和func2的功能。 W func1(w) func2(w) 机器数 值 机器数 值 机器数 值 0000007FH 127 0000007FH +127 0000007FH +127 00000080H 128 00000080H +128 FFFFFF80H –128 000000FFH 255 000000FFH +255 FFFFFFFFH –1 00000100H 256 00000000H 0 00000000H 0函数func1的功能是把无符号数高24位清零(左移24位再逻辑右移24位),结果一定是正的有符号数;而函数func2的功能是把无符号数的高24位都变成和第25位一样,因为左移24位后进行算术右移,高24位补符号位(即第25位)。4.填写下表,注意对比无符号数和带符号整数的乘法结果,以及截断操作前、后的结果。 模式 x y x×y(截断前) x×y(截断后) 机器数 值 机器数 值 机器数 值 机器数 值 无符号数 110 6 010 2 001100 12 100 4 二进制补码 110 –2 010 +2 111100 –4 100 –4 无符号数 001 1 111 7 000111 7 111 7 二进制补码 001 +1 111 –1 111111 –1 111 –1 无符号数 111 7 111 7 110001 49 001 1 二进制补码 111 –1 111 –1 000001 +1 001 +15.以下是两段C语言代码,函数arith()是直接用C语言写的,而optarith()是对arith()函数以某个确定的M和N编译生成的机器代码反编译生成的。根据optarith(),可以推断函数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;”三句对应,这些语句实现了x乘15的功能(左移4位相当于乘以16,然后再减1),因此,M等于15;y/N与“if(y<0)y+=3;y>>2;”两句对应,功能主要由第二句“y右移2位”实现,它实现了y除以4的功能,因此N是4。而第一句“if(y<0)y+=3;”主要用于对y=–1时进行调整,若不调整,则–1>>2=–1而–1/4=0,两者不等;调整后–1+3=2,2>>2=0,两者相等。思考:能否把if(y<0)y+=3;改成if(y<0)y+=2;?不能!因为y=-4时不正确。6.设A4(A1和B4(B1分别是四位加法器的两组输入,C0为低位来的进位。当加法器分别采用串行进位和先行进位时,写出四个进位C4(C1的逻辑表达式。参考答案:串行进位:C1=X1C0+Y1C0+X1Y1C2=X2C1+Y2C1+X2Y2C3=X3C2+Y3C2+X3Y3C4=X4C3+Y4C3+X4Y4并行进位: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器件设计一个16位先行进位补码加/减运算器,画出运算器的逻辑框图,并给出零标志、进位标志、溢出标志、符号标志的生成电路。参考答案(图略):逻辑框图参见教材中的图3.15和图3.16,将两个图结合起来即可,也即只要将图3.15中的B输入端的每一位Bi取反,得到Bi,和原码Bi一起送到一个二路选择器,由进位C0作为选择控制信号。当C0为1时做减法,此时,选择将Bi作为SN74181的B输入端;否则,当C0为1时,做加法。零标志ZF、进位标志CF、溢出标志OF、符号标志SF的逻辑电路根据以下逻辑表达式画出即可。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=F15用SN74181和SN74182器件设计一个32位的ALU,要求采用两级先行进位结构。写出所需的SN74181和SN74182芯片数。画出32位ALU的逻辑结构图。参考答案(图略):将如图3.15所示的两个16位ALU级联起来即可,级联时,低16位ALU的高位进位C16作为高16位ALU的低位进位C0,因此,只要用8片SN74181和2片SN74182。9.已知x=10,y=–6,采用6位机器数表示。请按如下要求计算,并把结果还原成真值。求[x+y]补,[x–y]补。用原码一位乘法计算[x×y]原。用MBA(基4布斯)乘法计算[x×y]补。用不恢复余数法计算[x/y]原的商和余数。用不恢复余数法计算[x/y]补的商和余数。参考答案:[10]补=001010[–6]补=111010 [6]补=000110[10]原=001010[–6]原=100110(1)[10+(–6)]补=[10]补+[–6]补=001010+111010=000100(+4)[10–(–6)]补=[10]补+[–(–6)]补=001010+000110=010000(+16)(2)先采用无符号数乘法计算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,+000111C,P和Y同时右移一位000111100得P4若两个6位数相乘的话,则还要右移两次,得000000111100符号位为:0(1=1,因此,[X×Y]原=100000111100即X×Y=–111100B=–60(3)[–10]补=110110,布斯乘法过程如下:PYy-1说明0000001110100设y-1=0,[P0]补=0y0y-1=00,P、Y直接右移一位0000000111010得[P1]补+110110y1y0=10,+[–X]补110110P、Y同时右移一位1110110011101得[P2]补+001010y2y1=01,+[X]补000101P、Y同时右移一位0000101001110得[P3]补+1101101001110y3y2=10,+[–X]补111000P、Y同时右移一位1111000100111得[P4]补+0000000100111y4y3=11,+0111100P、Y同时右移一位1111100010011得[P5]补+0000000010011y5y4=11,+0111110P、Y同时右移一位1111110001001得[P6]补因此,[X×Y]补=111111000100,即X×Y=–111100B=–60(4)因为除法计算是2n位数除n位数,所以[6]原=0110,[10]原=00001010,[–6]补=1010,商的符号位:0(1=1,运算过程(前面两个0省略)如下:余数寄存器R余数/商寄存器Q说明00001010开始R0=X+1010R1=X–Y101010100R1<0,则q4=0,没有溢出010101002R1(R和Q同时左移,空出一位商)+0110R2=2R1+Y101101000R2<0,则q3=0011010002R2(R和Q同时左移,空出一位商)+0110R3=2R2+Y110010000R3<0,则q2=0100100002R3(R和Q同时左移,空出一位商)+0110R3=2R2+Y111100000R4<0,则q1=0111000002R4(R和Q同时左移,空出一位商)+0110R5=2R4+Y010000001R5>0,则q0=1商的数值部分为:00001。所以,[X/Y]原=00001(最高位为符号位),余数为0100。(5)将10和–6分别表示成补码形式为:[10]补=01010,[–6]补=11010,计算过程如下:先对被除数进行符号扩展,[10]补=0000001010,[6]补=00110余数寄存器R余数/商寄存器Q说明0000001010开始R0=[X]+11010R1=[X]+[Y]1101001010R1与[Y]同号,则q5=110100101012R1(R和Q同时左移,空出一位上商1)+00110R2=2R1+[–Y]1101010101R2与[Y]同号,则q4=1,10101010112R2(R和Q同时左移,空出一位上商1)+00110R3=2R2+[-Y]1101101011R3与[Y]同号,则q3=110110101112R3(R和Q同时左移,空出一位上商1)+00110R4=2R3+[–Y]1110010111R4与[Y]同号,则q2=111001011112R4(R和Q同时左移,空出一位上商0)+00110R5=2R4+[-Y]1111101111R5与[Y]同号,则q1=1,11110111112R5(R和Q同时左移,空出一位上商1)+00110R6=2R5+[–Y]0010011110R6与[Y]异号,则q0=0,Q左移,空出一位上商1+00000+1商为负数,末位加1;余数不需要修正0010011111所以,[X/Y]补=11111,余数为00100。即:X/Y=–0001B=–1,余数为0100B=4将各数代入公式“除数×商+余数=被除数”进行验证,得:(–6)×(–1)+4=10。10.若一次加法需要1ns,一次移位需要0.5ns。请分别计算用一位乘法、两位乘法、基于CRA的阵列乘法、基于CSA的阵列乘法四种方式计算两个8位无符号二进制数乘积时所需的时间。参考答案:一位乘法:8次右移,8次加法,共计12ns;二位乘法:4次右移,4次加法,共计6ns;基于CRA的阵列乘法:每一级部分积不仅依赖于上一级部分积,还依赖于上一级最终的进位,而每一级进位又是串行进行的,所以最长的路径总共经过了8+2×(8–1)=22次全加器,共计约22ns;基于CSA的阵列乘法:本级进位和本级和同时传送到下一级,同级部分积之间不相互依赖,只进行O(N)次加法运算,因此,共计约8ns。11.在IEEE754浮点数运算中,当结果的尾数出现什么形式时需要进行左规,什么形式时需要进行右规?如何进行左规,如何进行右规?参考答案:(1)对于结果为±1x.xx……x的情况,需要进行右规。右规时,尾数右移一位,阶码加1。右规操作可以表示为:Mb(Mb×2-1,Eb(Eb+1。右规时注意以下两点:尾数右移时,最高位“1”被移到小数点前一位作为隐藏位,最后一位移出时,要考虑舍入。阶码加1时,直接在末位加1。(2)对于结果为±0.00……01x……x的情况,需要进行左规。左规时,数值位逐次左移,阶码逐次减1,直到将第一位“1”移到小数点左边。假定k为结果中“±”和左边第一个1之间连续0的个数,则左规操作可以表示为:Mb(Mb×2k,Eb(Eb–k。左规时注意以下两点:a)尾数左移时数值部分最左k个0被移出,因此,相对来说,小数点右移了k位。因为进行尾数相加时,默认小数点位置在第一个数值位(即:隐藏位)之后,所以小数点右移k位后被移到了第一位1后面,这个1就是隐藏位。b)执行Eb(Eb–k时,每次都在末位减1,一共减k次。12.在IEEE754浮点数运算中,如何判断浮点运算的结果是否溢出?参考答案:浮点运算结果是否溢出,并不以尾数溢出来判断,而主要看阶码是否溢出。尾数溢出时,可通过右规操作进行纠正。阶码上溢时,说明结果的数值太大,无法表示;阶码下溢时,说明结果数值太小,可以把结果近似为0。在进行对阶、规格化、舍入和浮点数的乘/除运算等过程中,都需要对阶码进行加、减运算,可能会发生阶码上溢或阶码下溢,因此,必须对阶码进行溢出判断。(有关对阶码进行溢出判断的方法可参见教材中相关章节。)13.假设浮点数格式为:阶码是4位移码,偏置常数为8,尾数是6位补码(采用双符号位),用浮点运算规则分别计算在不采用任何附加位和采用2位附加位(保护位、舍入位)两种情况下的值。(假定对阶和右规时采用就近舍入到偶数方式)(1)(15/16)×27+(2/16)×25(2)(15/16)×27–(2/16)×25(3)(15/16)×25+(2/16)×27(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)×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根据题目所给的各种位数,可以得到在机器中表示为:[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尾数M中小数点前面有三位,前两位为数符,表示双符号,第三位加了括号,是隐藏位“1”。没有附加位时的计算:X+Y1[ΔE]补=[Ex]移+[–[Ey1]移]补(
本文档为【计算机组成与系统结构课后练习及解析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥11.9 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
Sky
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:76
分类:
上传时间:2018-10-25
浏览量:76