第二章5.分别写出下列十进制数的原码、反码和补码。7/16,5/16,4/16,1/16,0,-1/16,-4/16,-5/16,-7/16答:原码反码补码7/160.01110.01110.01115/160.01010.01010.01014/160.01000.01000.01001/160.00010.00010.0001+00.00000.00000.0000-01.00001.11110.0000-1/161.00011.11101.1111-4/161.01001.10111.1100-5/161.01011.10101.1011-7/161.01111.10001.10017.已知下列数的补码表示,请写出它们的真值。[x]补=0.10100[x]补=1.0111[x]补=1.0000答:二进制真值分别为:0.101,-0.1001,-1。10.若机器字长16位,以下几种情况能表示的数据范围是多少?1)无符号整数2)原码定点小数3)补码定点小数4)原码定点整数5)补码定点整数答:1)无符号整数0~216-12)原码定点小数-(1-2-15)~1-2-153)补码定点小数-1~1-2-154)原码定点整数-(215-1)~215-15)补码定点整数-215~215-114.将下列数转换为IEEE单精度浮点数:1)28.75解:1)十进制数28.75转化为二进制数:11100.11B,规格化为11100.11=1.110011×24该数为正,符号位=0;移码表示的阶码=10000011;尾数=11001100000000000000000以短浮点数格式存储该数为0,10000011,11001100000000000000000=41E60000H21.某循环冗余校验码的生成多项式为x3+x2+1,若发送信息位1111和1100,则CRC码分别为什么?接收端收到的CRC码:0000000、1001111、0010111、1011000中哪些是发生了错误的?答:A(x)=1111和1100左移r=3位后A(x)·x3=1111000和1100000g(x)=x3+x2+1=1101(r+1=4位)A(x)·x3/g(x)=1011+111/1101和1001+101/1101A(x)·x3+R(x)=1111111和1100101-----这就是2个CRC码接收到的CRC码除以生成多项式余数不为0的出错:1001111、1011000。第三章9.用原码一位乘法和原码两位乘法分别计算X×Y:a.X=-0.11011,Y=0.11101解:a原码一位乘|X|=00.11011→寄存器B,|Y|=0.11101→寄存器C,0→寄存器A。部分积A乘数C运算过程00.0000011101C5=1,+|X|+00.1101100.11011部分积右移一位→00.0110111110C4=0,+0+00.0000000.01101部分积右移一位→00.0011011111C3=1,+|X|+00.1101101.00001部分积右移一位→00.1000011111C2=1,+|X|+00.1101101.01011部分积右移一位→00.1010111111C1=1,+|X|+00.1101101.10000部分积右移一位→00.1100001111由于两数异号,所以得X×Y=-0.110000111110.用补码一位乘法和补码两位乘法分别计算X×Y:a.X=-0.11011,Y=0.11101a补码一位乘部分积0→寄存器A,[X]补=11.00101→寄存器B,[Y]补=0.11101→寄存器C。用Booth法求解过程如下:部分积A乘数C附加位说明00.000000.111010C5C6=10,+[-X]补+[-X]补00.1101100.11011右移一位→00.011011011101C5C6=01,+[X]补+[X]补11.0010111.10010右移一位→11.110010101110C5C6=10,+[-X]补+[-X]补00.1101100.10100右移一位→00.010100010111C5C6=11,+0+000.0000000.01010右移一位→00.001010001011C5C6=11,+0+000.0000000.00101右移一位→00.000101000101C5C6=01,+[X]补+[X]补11.0010111.0011110001最后一步不移位所以[X×Y]补=11.0011110010,X×Y=-0.110000111112用原码加减交替法和补码加减交替法计算X÷Y。a.X=-0.1001Y=0.1101解:a加减交替法|X|=00.1001,|Y|=00.1101,|Y|变补=11.0011被除数/部分余数A商C000.10.110.1100.1101说明00.10010000.0-|Y|+|Y|变补11.001111.11000000.0余数<0,商0,左移一位←11.10000000.0+|Y|00.1101+|Y|00.01010000.1余数>0,商1,左移一位←00.10100001.0+|Y|变补11.0011-|Y|11.11010001.0余数<0,商0,左移一位←11.10100010.0+|Y|00.1101+|Y|00.011100101余数>0,商1,左移一位←00.111001010+|Y|变补11.0011-|Y|00.000101011余数>0,商100.0001所以商Q=-0.1011,余数r=-0.0001×2-4。a补码加减交替法[X]补=11.0111,[Y]补=00.1101,[-Y]补=11.0011被除数/余数A商C000.10.11说明11.01110000.0[X]补和[Y]补异号,加除数+[Y]补00.110100.01000000.1余数和除数同号,商1←00.10000001.0,左移一位下次减除数+[-Y]补11.001111.10110001.0余数和除数异号,商0←11.01100010.0左移一位,下次加除数+[Y]补00.110100.00110010.1余数和除数同号,商1←00.01100101.0左移一位,下次减除数+[-Y]补11.001111.100101010余数和除数异号,商0←11.001010100左移一位,下次加除数+[Y]补00.110111.1111←11.111110101末尾恒置1商[Q]补=1.0101,余数[r]补=11.1111×2-4。第四章12.某机器的16位单字长访内指令的格式如下:42118操作码Mode@ID其中,D为立即数或形式地址,补码表示;Mode为寻址模式,0表示立即寻址,1表示直接寻址,2表示基地址寻址,3表示相对寻址;@为间址标志,@=1表示间接寻址,@=0表示直接寻址;I为变址标志,I=1表示变址寻址,I=0表示非变址寻址。设PC、Rx、Rb分别为指令计数器、变址寄存器、基址寄存器,EA为有效地址,试解答下列问题:(1)该指令格式能定义多少种不同的操作?(2)试写出立即寻址、直接寻址、基址寻址、变址寻址、相对寻址方式中计算有效地址EA的表达式。(3)设基址寄存器为16位,在基址寻址时,可寻址的主存地址范围是多少?(4)间接寻址时,可寻址的主存地址范围是多少?若采用多重间址,可寻址的主存地址范围又是多少?解:(1)24=16。(2)立即寻址:无EA直接寻址:EA=D;D为指令中给出偏移量基址寻址:EA=(Rb)+D;变址寻址:EA=(Rx)+D;相对寻址:EA=(PC)+D;PC为程序计数器,D为偏移量(3)0~216-1(4)间接寻址可寻址的主存地址范围为0~216-1,多重间址可寻址的主存地址范围为0~215-1。13.某机的指令格式如下:15109870操作码ModeD其中,D为立即数或形式地址,补码表示;Mode为寻址模式,0表示直接寻址,1表示用变址寄存器Rx1进行寻址,2表示用变址寄存器Rx2进行寻址,3表示相对寻址。若已知(PC)=1000H,Rx1=0005H,Rx2=1005H,请计算出下列指令的有效地址:①8442H②4545H解:①8442H=1000010001000010因为Mode=0,所以为直接寻址,EA=D=0042H②4545H=0100010101000101因为Mode=1,所以用变址寄存器Rx1寻址,EA=(Rx1)+D=0005H+45H=004AH16.某机字长32位,CPU的寻址范围为1MB,14个通用寄存器,共30条单字长双地址指令,要求有立即、直接、间接、寄存器、基址、相对寻址方式。试设计其指令格式。答:14个通用寄存器需要4位来表示,30条单字长指令需要5位来表示,7种寻址方式需要3位来表示,剩下的20位用来表示操作数。指令格式为:5位操作码+3位寻址方式设置+4位寄存器操作数+20存储器操作数第五章9.用16K×1位的DRAM芯片组成64K×8位的存储器,要求:(1)画出该存储器组成的逻辑图。(2)设存储器读、写周期均为0.5μs,CPU在1μs内至少要访存一次。试问采用哪种刷新方式比较合适?两次刷新的最大时间间隔是多少?答:由题意知,存储器的总容量为64KB,故共需16条地址线(A0~A15),需要16K×1位DRAM芯片的个数为:(64K×8位)/(16K×1位)=32片,芯片地址线占14位(A0~A13),高2位的地址线(A14~A15)作为2:4译码器的输入端,4个输出端分别与4个DRAM芯片的片选信号端相连接。其组成逻辑框图如下:由已知条件可知,CPU在1μs内至少访存一次,故整个存储器的平均读/写周期与单个DRAM芯片的读/写周期基本相同,采用异步式刷新方式较合适。动态MOS存储器两次刷新的最大时间间隔为2ms/128=15.625us,应该取15.5us比较合适(取存取周期的整数倍)。16.某存储器容量为16M字,字长32位,模块数m=4,分别用顺序方式和交叉方式进行组织。若存取周期T=200ns,数据总线宽度为32位,总线传送周期τ=40ns。问:顺序存储器和交叉存储器的平均存取时间、带宽各是多少?答:顺序存储器和交叉存储器连续读出4个字的信息总量都是:q=32位×4=128位顺序存储器连续读出4个字所需的时间是:t1=m×T=4×200ns=800ns=8×10-7s;交叉存储器连续读出4个字所需的时间是:t2=T+(m-1)τ=200ns+3×40ns=320ns=3.2×10-7s因此,顺序存储器和交叉存储器的带宽分别为:W1=q/t1=128÷(8×10-7)=16×107(b/s)W2=q/t2=128÷(3.2×10-7)=40×107(b/s)19.容量为64块的cache采用组相联映像方式,字块大小为128个字,每4块为一组。若主存容量为4096块,且以字编址。(1)给出主存地址字段的组成及各段的长度;(2)设Cache的初始状态为空,CPU从主存的第0号单元顺序读出500个字(一次读出一个字),重复读取上述数据10次,Cache的命中率为多少?(3)若Cache的速度是主存速度的5倍,则增加Cache后比没有Cache时速度提高多少倍?解:(1)由每字块有128个字可得:主存地址字段中字块内地址字段的长度w应为7位。Cache容量为64块,每4块为一组,则Cache共有24个组,表示Cache组号的位数为4,表示组中块号的位数为2。主存容量为4096块,Cache容量为64块,主存共分为4096/64=26个区,故地址字段中主存区号地址位数为6。主存地址字段格式为:区号地址(6位)组地址(4位)组内块号(2位)字块内字地址(7位)(2)Cache初始状态为空,每个字块中有128个字,故CPU第一次读500个字时,第0、128、256、384号单元,共有4次未命中,后9次重复读这500个字均命中,故命中率为:[(500×10-4)/500×10]×100%=99.92%