计算机组织与系统结构第三章习题答案.doc

上传人:韩长文 文档编号:8638331 上传时间:2020-12-11 格式:DOC 页数:14 大小:203.50KB
返回 下载 相关 举报
计算机组织与系统结构第三章习题答案.doc_第1页
第1页 / 共14页
计算机组织与系统结构第三章习题答案.doc_第2页
第2页 / 共14页
计算机组织与系统结构第三章习题答案.doc_第3页
第3页 / 共14页
计算机组织与系统结构第三章习题答案.doc_第4页
第4页 / 共14页
计算机组织与系统结构第三章习题答案.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《计算机组织与系统结构第三章习题答案.doc》由会员分享,可在线阅读,更多相关《计算机组织与系统结构第三章习题答案.doc(14页珍藏版)》请在三一文库上搜索。

1、.第 3 章 习 题 答 案2(4)高级语言中的运算和机器语言(即指令)中的运算是什么关系?假定某一个高级语言源程序P中有乘、除运算,但机器M中不提供乘、除运算指令,则程序P能否在机器M上运行?为什么?参考答案:(略)3考虑以下C语言程序代码:int func1(unsigned word)return (int) ( word 24);int func2(unsigned word)return ( (int) word 24;假设在一个32位机器上执行这些函数,该机器使用二进制补码表示带符号整数。无符号数采用逻辑移位,带符号整数采用算术移位。请填写下表,并说明函数func1和func2的功

2、能。Wfunc1(w)func2(w)机器数值机器数值机器数值0000 007FH1270000 007FH+1270000 007FH+1270000 0080H1280000 0080H+128FFFF FF80H1280000 00FFH2550000 00FFH+255FFFF FFFFH10000 0100H2560000 0000H00000 0000H0函数func1的功能是把无符号数高24位清零(左移24位再逻辑右移24位),结果一定是正的有符号数;而函数func2的功能是把无符号数的高24位都变成和第25位一样,因为左移24位后进行算术右移,高24位补符号位(即第25位)。4

3、填写下表,注意对比无符号数和带符号整数的乘法结果,以及截断操作前、后的结果。模式xyxy(截断前)xy(截断后)机器数值机器数值机器数值机器数值无符号数11060102001100121004二进制补码1102010+211110041004无符号数0011111700011171117二进制补码001+1111111111111111无符号数11171117110001490011二进制补码11111111000001+1001+15以下是两段C语言代码,函数arith( )是直接用C语言写的,而optarith( )是对arith( )函数以某个确定的M和N编译生成的机器代码反编译生成的。

4、根据optarith( ),可以推断函数arith( ) 中M和N的值各是多少?精品.#define M #define N int arith(int x, int y)int result = 0 ;result = x*M + y/N; return result;int optarith ( int x, int y)int t = x;x = 4;x - = t;if ( y 2;return x+y;参考答案:可以看出x*M和“int t = x; x = 4;x-=t;”三句对应,这些语句实现了x乘15的功能(左移4位相当于乘以16,然后再减1),因此,M等于15;y/N与“if

5、 ( y 2;”两句对应,功能主要由第二句“y右移2位”实现,它实现了y除以4的功能,因此N是4。而第一句“if ( y 2=1而1/4=0,两者不等;调整后 1+3=2,22=0,两者相等。思考:能否把 if ( y 0 ) y += 3; 改成 if ( y 0 ) y += 2; ?不能!因为y = - 4时不正确。6设A4A1和B4B1分别是四位加法器的两组输入,C0为低位来的进位。当加法器分别采用串行进位和先行进位时,写出四个进位C4 C1的逻辑表达式。参考答案:串行进位:C1 = X1C0+Y1C0 + X1 Y1 C2 = X2C1+Y2C1 + X2 Y2 C3 = X3C2+

6、Y3C2 + X3 Y3 C4 = X4C3+Y4C3 + X4 Y4 并行进位: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) (X精品.2+Y2)(X1+Y1)C07用SN7418

7、1和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+

8、F6+F5+F4+F3+F2+F1+F0CF=C16OF= C0(A15B15F15 + A15B15F15)+ C0(A15B15F15 + A15B15F15)SF= F158 用SN74181和SN74182器件设计一个32位的ALU,要求采用两级先行进位结构。(1) 写出所需的SN74181和SN74182芯片数。(2) 画出32位ALU的逻辑结构图。参考答案(图略): 将如图3.15所示的两个16位ALU级联起来即可,级联时,低16位ALU的高位进位C16作为高16位ALU的低位进位C0,因此,只要用8片SN74181和2片SN74182。9已知x = 10,y = 6,采用6位机器

9、数表示。请按如下要求计算,并把结果还原成真值。(1) 求x+y补,xy补。(2) 用原码一位乘法计算xy原。(3) 用MBA(基4布斯)乘法计算xy补。(4) 用不恢复余数法计算x/y原的商和余数。(5) 用不恢复余数法计算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) 先采用无符号数

10、乘法计算001010 000110的乘积,原码一位乘法过程(前面两个0省略)如下: C P Y 说明 0 0 0 0 0 0 1 1 0 P0 = 0 + 0 0 0 0 y4 = 0,+0 0 0 0 0 0 C, P 和Y同时右移一位 0 0 0 0 0 0 0 1 1 得P1+ 1 0 1 0 y3 = 1,+X 0 1 0 1 0 C, P 和Y同时右移一位 0 0 1 0 1 0 0 0 1 得P2精品. + 1 0 1 0 y2 = 1,+X 0 1 1 1 1 0 0 0 0 C, P 和Y同时右移一位 0 0 1 1 1 1 0 0 0 得P3 + 0 0 0 0 y1 = 0

11、,+0 0 0 1 1 1 C, P 和Y同时右移一位 0 0 0 1 1 1 1 0 0 得P4 若两个6位数相乘的话,则还要右移两次,得 000000 111100符号位为:0 1 = 1,因此,XY原 = 1000 0011 1100即X Y = 11 1100B = 60(3) 10补 = 110110,布斯乘法过程如下: P Y y-1 说明 0 0 0 0 0 0 1 1 1 0 1 0 0 设y-1 = 0,P0补 = 0 y0 y-1 = 00,P、Y直接右移一位0 0 0 0 0 0 0 1 1 1 0 1 0 得P1补+ 1 1 0 1 1 0 y1 y0 =10,+X补1

12、 1 0 1 1 0 P、Y同时右移一位1 1 1 0 1 1 0 0 1 1 1 0 1 得P2补 + 0 0 1 0 1 0 y2 y1 =01,+X补 0 0 0 1 0 1 P、Y同时右移一位0 0 0 0 1 0 1 0 0 1 1 1 0 得P3补+ 1 1 0 1 1 0 1 0 0 1 1 1 0 y3 y2 = 10,+X补 1 1 1 0 0 0 P、Y同时右移一位 1 1 1 1 0 0 0 1 0 0 1 1 1 得P4补+ 0 0 0 0 0 0 0 1 0 0 1 1 1 y4 y3 = 11,+0 1 1 1 1 0 0 P、Y同时右移一位 1 1 1 1 1 0

13、 0 0 1 0 0 1 1 得P5补+ 0 0 0 0 0 0 0 0 1 0 0 1 1 y5 y4 = 11,+0 1 1 1 1 1 0 P、Y同时右移一位 1 1 1 1 1 1 0 0 0 1 0 0 1 得P6补因此,X Y补=1111 1100 0100,即X Y = 11 1100B= 60(4) 因为除法计算是2n位数除n位数,所以6原=0110,10原=0000 1010,6补=1010,商的符号位:0 1 = 1,运算过程(前面两个0省略)如下: 余数寄存器R 余数/商寄存器Q 说 明 0 0 0 0 1 0 1 0 开始R0 = X+ 1 0 1 0 R1 = XY1

14、 0 1 0 1 0 1 0 0 R1 0,则q 4 = 0,没有溢出 0 1 0 1 0 1 0 0 2R1(R和Q同时左移,空出一位商)+ 0 1 1 0 R2 = 2R1+Y 1 0 1 1 0 1 0 0 0 R2 0,则q 3 = 0 0 1 1 0 1 0 0 0 2R2 (R和Q同时左移,空出一位商)+ 0 1 1 0 R3 = 2R2 +Y 1 1 0 0 1 0 0 0 0 R3 0,则q 2 = 0 1 0 0 1 0 0 0 0 2R3 (R和Q同时左移,空出一位商)精品.+ 0 1 1 0 R3 = 2R2 +Y 1 1 1 1 0 0 0 0 0 R4 0,则q 0

15、= 1商的数值部分为:00001。所以,X/Y原=00001 (最高位为符号位),余数为0100。(5) 将10和6分别表示成补码形式为:10 补 = 0 1010 , 6 补 = 1 1010,计算过程如下:先对被除数进行符号扩展,10 补=00000 01010,6 补 = 0 0110 余数寄存器R 余数/商寄存器Q 说 明0 0 0 0 0 0 1 0 1 0 开始R0 = X + 1 1 0 1 0 R1=X +Y1 1 0 1 0 0 1 0 1 0 R1与Y同号,则q5 =11 0 1 0 0 1 0 1 0 1 2R1(R和Q同时左移,空出一位上商1)+0 0 1 1 0 R2

16、 = 2R1+Y1 1 0 1 0 1 0 1 0 1 R2与Y同号,则q4= 1,1 0 1 0 1 0 1 0 1 1 2R2(R和Q同时左移,空出一位上商1)+ 0 0 1 1 0 R3 = 2R2 +-Y1 1 0 1 1 0 1 0 1 1 R3与Y同号,则q3 = 11 0 1 1 0 1 0 1 1 1 2R3(R和Q同时左移,空出一位上商1)+ 0 0 1 1 0 R4 = 2R3 +Y1 1 1 0 0 1 0 1 1 1 R4与Y同号,则q 2 = 1 1 1 0 0 1 0 1 1 1 1 2R4 (R和Q同时左移,空出一位上商0) + 0 0 1 1 0 R5= 2R4

17、 +-Y1 1 1 1 1 0 1 1 1 1 R5与Y同号,则q1= 1,1 1 1 1 0 1 1 1 1 1 2R5 (R和Q同时左移,空出一位上商1)+ 0 0 1 1 0 R6= 2R5 +Y0 0 1 0 0 1 1 1 1 0 R6与Y异号,则q 0 = 0,Q左移,空出一位上商1 + 0 0 0 0 0 + 1 商为负数,末位加1;余数不需要修正0 0 1 0 0 1 1 1 1 1 所以,X/Y 补=11111,余数为00100。即:X/Y= 0001B = 1,余数为 0100B = 4将各数代入公式“除数商+余数= 被除数”进行验证,得:(6)(1) +4= 10。10若

18、一次加法需要1ns,一次移位需要0.5ns。请分别计算用一位乘法、两位乘法、基于CRA的阵列乘法、基于CSA的阵列乘法四种方式计算两个8位无符号二进制数乘积时所需的时间。参考答案:一位乘法:8次右移,8次加法,共计12ns;二位乘法:4次右移,4次加法,共计6ns;基于CRA的阵列乘法:每一级部分积不仅依赖于上一级部分积,还依赖于上一级最终的进位,而每一级进位又是串行进行的,所以最长的路径总共经过了8+2(81)=22次全加器,共计约22ns;基于CSA的阵列乘法:本级进位和本级和同时传送到下一级,同级部分积之间不相互依赖,只进行O(N)次加法运算,因此,共计约8ns。11在IEEE 754浮

19、点数运算中,当结果的尾数出现什么形式时需要进行左规,什么形式时需要进行右规?如何进行左规,如何进行右规?精品. 参考答案:(1) 对于结果为1x .xxx的情况,需要进行右规。右规时,尾数右移一位,阶码加1。右规操作可以表示为:M bM b 2 -1,EbEb+1。右规时注意以下两点:a) 尾数右移时,最高位“1”被移到小数点前一位作为隐藏位,最后一位移出时,要考虑舍入。b) 阶码加1时,直接在末位加1。(2) 对于结果为0.0001xx的情况,需要进行左规。左规时,数值位逐次左移,阶码逐次减1,直到将第一位“1”移到小数点左边。假定k为结果中“”和左边第一个1之间连续0的个数,则左规操作可以

20、表示为:M bM b 2k,EbEbk。左规时注意以下两点:a) 尾数左移时数值部分最左k个0被移出,因此,相对来说,小数点右移了k位。因为进行尾数相加时,默认小数点位置在第一个数值位(即:隐藏位)之后,所以小数点右移k位后被移到了第一位1后面,这个1就是隐藏位。b) 执行EbEbk时,每次都在末位减1,一共减k次。12在IEEE 754浮点数运算中,如何判断浮点运算的结果是否溢出?参考答案:浮点运算结果是否溢出,并不以尾数溢出来判断,而主要看阶码是否溢出。尾数溢出时,可通过右规操作进行纠正。阶码上溢时,说明结果的数值太大,无法表示;阶码下溢时,说明结果数值太小,可以把结果近似为0。在进行对阶

21、、规格化、舍入和浮点数的乘/除运算等过程中,都需要对阶码进行加、减运算,可能会发生阶码上溢或阶码下溢,因此,必须对阶码进行溢出判断。(有关对阶码进行溢出判断的方法可参见教材中相关章节。)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参考答案

22、(假定采用隐藏位): X= (15/16) 27 = 0.111100B 27= (1.111000)2 26 Y1= (2/16) 25 = 0.001000B 25= (1.000000)2 22 Y2= (2/16) 25 = 0.001000B 25= (1.000000)2 22 K= (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根据题目所给的各种位数,可以得到在机器中表示

23、为: X浮 = 00 1110 (1)111000 Y1浮 = 00 1010 (1)000000 Y2浮 = 11 1010 (1)000000 K浮 = 00 1100 (1)111000 J1浮 = 00 1100 (1)000000 J2浮 = 11 1100 (1)000000 所以,E x = 1110,Mx = 00 (1). 111000 ,E y1 = 1010,My = 00(1).000000,E y2 = 1010,My = 11(1).000000Ek = 1100,MK = 00 (1). 111000 ,E J1 = 1100,MJ1 = 00(1).000000

24、,E J2 = 1100,MJ2 = 11(1).000000精品. 尾数M中小数点前面有三位,前两位为数符,表示双符号,第三位加了括号,是隐藏位“1”。没有附加位时的计算:(1) X+Y1E补 = E x移 + E y1移补 (mod 2n) = 1110 + 0110 = 0100E = 4,根据对阶规则可知需要对y1进行对阶,结果为:E y1 = E x = 1110,My 1= 000.000100尾数相加:Mb = Mx + My1 = 001. 111000+ 000.000100 = 001.111100,两位符号相等,数值部分最高位为1,不需要进行规格化,所以最后结果为:E=1

25、110,M=00(1).111100, 即(31/32) 27(2) X+Y2E补 = E x移 + E y2移补 (mod 2n) = 1110 + 0110 = 0100;E = 4,根据对阶规则可知需要对y2进行对阶,结果为:E y2 = E x = 1110,My2= 111.111100尾数相加:Mb = Mx + My2 = 001. 111000+ 111.111100=001.110100,两位符号相等,数值部分最高为1,不需要进行规格化,所以最后结果为:E=1110,M=00(1).110100, 即(29/32) 27(3) K+J1E补 = E K移 + E J1移补 (

26、mod 2n) = 1100 + 0100 = 0000;E = 0,根据对阶规则可知不需要进行对阶。尾数相加:Mb = MK + MJ1 = 001. 111000+ 001.000000= 010.111000,两位符号不等,说明尾数溢出,需要进行右规,最后结果为:E=1101,M=00(1).011100, 即(23/32) 26(4) K+J2E补 = E K移 + E J2移补 (mod 2n) = 1100 + 0100 = 0000;E = 0,根据对阶规则可知不需要进行对阶。尾数相加:Mb = MK + MJ2 = 00 1. 111000+ 111.000000 = 000.

27、111000,两位符号相等,数值部分最高位为0,需要进行左规,所以最后结果为:E=1011,M=00(1).110000, 即(7/8) 24如果有两位附加位精度上会有提高,在对阶的时候要注意小数点后就不是6位,而是8位,最后两位为保护位和舍入位。但是由于本题6位尾数已经足够,再加2位附加位,其结果是一样的。14采用IEEE 754单精度浮点数格式计算下列表达式的值。(1)0.75+( 65.25)(2)0.75( 65.25)参考答案:x = 0.75 = 0.110.0B = (1.10.0)2 2-1 y = 65.25 = 1000001.01000.0B = (1.00000101.

28、0) 2 26 用IEEE 754标准单精度格式表示为: x浮 = 0 01111110 10.0 y浮 = 1 10000101 000001010.0 所以,E x = 01111110,Mx = 0 (1). 1.0 ,E y = 10000101,My = 1(1).000001010.0 尾数Mx和My中小数点前面有两位,第一位为数符,第二位加了括号,是隐藏位“1”。以下是计算机中进行浮点数加减运算的过程(假定保留2位附加位:保护位和舍入位)(1)0.75+ ( 65.25) 对阶: E补 = E x移 + E y移补 (mod 2n) = 0111 1110 + 0111 1011

29、 = 1111 1001 E = 7,根据对阶规则可知需要对x进行对阶,结果为:Ex = E y = 10000101,Mx = 00.000000110.000精品.x的尾数Mx右移7位,符号不变,数值高位补0,隐藏位右移到小数点后面,最后移出的2位保留 尾数相加:Mb = Mx + My = 00.000000110.000+ 11.000001010 .000 (注意小数点在隐藏位后)根据原码加/减法运算规则,得:00.000000110.000+ 11.000001010.000 = 11.000000100000上式尾数中最左边第一位是符号位,其余都是数值部分,尾数后面两位是附加位(

30、加粗)。 规格化:根据所得尾数的形式,数值部分最高位为1,所以不需要进行规格化。 舍入:把结果的尾数Mb中最后两位附加位舍入掉,从本例来看,不管采用什么舍入法,结果都一样,都是把最后两个0去掉,得:Mb = 11.0000001000 溢出判断:在上述阶码计算和调整过程中,没有发生“阶码上溢”和“阶码下溢”的问题。因此,阶码Eb = 10000101。 最后结果为Eb = 10000101,Mb = 1(1).000000100,即: 64.5。(2) 0.75( 65.25) 对阶: E补 = E x移 + E y移补 (mod 2n) = 0111 1110 + 0111 1011 = 1

31、111 1001 E = -7,根据对阶规则可知需要对x进行对阶,结果为:Ex = E y = 10000110,Mx = 00.000000110.000x的尾数Mx右移一位,符号不变,数值高位补0,隐藏位右移到小数点后面,最后移出的位保留 尾数相加:Mb = Mx My = 00.000000110.000 11.000001010.000 (注意小数点在隐藏位后)根据原码加/减法运算规则,得:00.000000110.000 11.000001010.000=01.00001000000上式尾数中最左边第一位是符号位,其余都是数值部分,尾数后面两位是附加位(加粗)。 规格化:根据所得尾数

32、的形式,数值部分最高位为1,不需要进行规格化。 舍入:把结果的尾数Mb中最后两位附加位舍入掉,从本例来看,不管采用什么舍入法,结果都一样,都是把最后两个0去掉,得:Mb = 01.000010000 溢出判断:在上述阶码计算和调整过程中,没有发生“阶码上溢”和“阶码下溢”的问题。因此,阶码Eb = 10000101。 最后结果为Eb = 10000101,Mb = 0(1).000010000,即:+66。 思考题:对阶时发生什么情况,就可以不再继续进行计算?15假定十进制数用8421 NBCD码表示,采用十进制加法运算计算下列表达式的值,并讨论在十进制BCD码加法运算中如何判断溢出。(1)2

33、34+567 (2)548+729参考答案:(1)234+567 0010 0011 0100 + 0101 0110 0111 0111 1001 1011 + 01100111 1010 0001 + 0110 00001000 0000 0001 结果为: (801)10(2)548+729精品. 0000 0101 0100 1000 + 0000 0111 0010 1001 0000 1100 0111 0001 + 0000 0110 0000 01100001 0010 0111 0111 结果为: (1277)10在第(2)题中,如果是采用12位数表示加数548和729,则能

34、看出最后得到的答案是1100 0111 0111,这时就是BCD码加法溢出了。所以我们在判断的时候不能仅仅看BCD码最高位是不是丢失,而要看结果的最高4位是不是大于9,如果大于9,就可以认为是溢出了。16假定十进制数用8421 NBCD码表示,十进制运算673356可以采用673加上(356)的模10补码实现。画出实现上述操作的3位十进制数的BCD码减法运算线路,列出线路中所有的输入变量和输出变量。参考答案: (356) 10补 = 0110 0100 0100 0110 0111 0011 + 0110 0100 0100 1100 1011 0111 + 0110 0110 00000011 0001 0111 最高位产生进位,因此,结果为正数:0011 0001 0111,故结果为:(+317)10电路图分为两部分,一个是求出模10补码,另一个是计算以及判断输出结果的电路图(参见教材图3.33)。求模10补码的电路图(RTL级)如下:计算电路图(RTL级)如下:精品.如有侵权请联系告知删除,感谢你们的配合!精品

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1