您好,欢迎访问三七文档
第1章习题答案5.若有两个基准测试程序P1和P2在机器M1和M2上运行,假定M1和M2的价格分别是5000元和8000元,下表给出了P1和P2在M1和M2上所花的时间和指令条数。程序M1M2指令条数执行时间(ms)指令条数执行时间(ms)P1200×10610000150×1065000P2300×1033420×1036请回答下列问题:(1)对于P1,哪台机器的速度快?快多少?对于P2呢?(2)在M1上执行P1和P2的速度分别是多少MIPS?在M2上的执行速度又各是多少?从执行速度来看,对于P2,哪台机器的速度快?快多少?(3)假定M1和M2的时钟频率各是800MHz和1.2GHz,则在M1和M2上执行P1时的平均时钟周期数CPI各是多少?(4)如果某个用户需要大量使用程序P1,并且该用户主要关心系统的响应时间而不是吞吐率,那么,该用户需要大批购进机器时,应该选择M1还是M2?为什么?(提示:从性价比上考虑)(5)如果另一个用户也需要购进大批机器,但该用户使用P1和P2一样多,主要关心的也是响应时间,那么,应该选择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。从执行速度来看,对于P2,因为100/70=1.43倍,所以M1比M2快0.43倍。(3)在M1上执行P1时的平均时钟周期数CPI为:10×800M/(200×106)=40。在M2上执行P1时的平均时钟周期数CPI为:5×1.2G/(150×106)=40。(4)考虑运行P1时M1和M2的性价比,因为该用户主要关心系统的响应时间,所以性价比中的性能应考虑执行时间,其性能为执行时间的倒数。故性价比R为:R=1/(执行时间×价格)R越大说明性价比越高,也即,“执行时间×价格”的值越小,则性价比越高。因为10×50005×8000,所以,M2的性价比高。应选择M2。(5)P1和P2需要同等考虑,性能有多种方式:执行时间总和、算术平均、几何平均。若用算术平均方式,则:因为(10+0.003)/2×5000(5+0.006)/2×8000,所以M2的性价比高,应选择M2。若用几何平均方式,则:因为sqrt(10×0.003)×5000sqrt(5×0.006)×8000,所以M1的性价比高,应选择M1。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%。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.实现下列各数的转换。(3)(010110010110.0011)8421=(?)10=(?)2=(?)16参考答案:(3)(010110010110.0011)8421=(596.3)10=(1001010100.01001100110011…)2=(254.4CCC…)164.假定机器数为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:10000000000000007.假定一台32位字长的机器中带符号整数用补码表示,浮点数用IEEE754标准表示,寄存器R1和R2的内容分别为R1:0000108BH,R2:8080108BH。不同指令对寄存器进行不同的操作,因而,不同指令执行时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器R1和R2的内容,则R1和R2中操作数的真值分别为多少?(1)无符号数加法指令(2)带符号整数乘法指令(3)单精度浮点数减法指令参考答案: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-1269.以下是一个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型,或循环的测试条件改为ilen。13.设一个变量的值为4098,要求分别用32位补码整数和IEEE754单精度浮点格式表示该变量(结果用十六进制表示),并说明哪段二进制序列在两种表示中完全相同,为什么会相同?参考答案:4098=+1000000000010B=+1.00000000001×21232位2-补码形式为:00000000000000000001000000000010(00001002H)IEEE754单精度格式为:01000101100000000001000000000000(45801000H)粗体部分为除隐藏位外的有效数字,因此,在两种表示中是相同的序列。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,说明确实发生了传输错误,验证正确。第3章习题答案3.考虑以下C语言程序代码:intfunc1(unsignedword){return(int)((word24)24);}intfunc2(unsignedword){return((int)word24)24;}假设在一个32位机器上执行这些函数,该机器使用二进制补码表示带符号整数。无符号数采用逻辑移位,带符号整数采用算术移位。请填写下表,并说明函数func1和func2的功能。Wfunc1(w)func2(w)机器数值机器数值机器数值0000007FH1270000007FH+1270000007FH+12700000080H12800000080H+128FFFFFF80H–128000000FFH255000000FFH+255FFFFFFFFH–100000100H25600000000H000000000H0函数func1的功能是把无符号数高24位清零(左移24位再逻辑
本文标题:计算机组成原理作业
链接地址:https://www.777doc.com/doc-5594304 .html