计算机组成原理笔记03

计算机组成原理笔记03:

做题笔记1


内容:

  1. 教材的思维导图
  2. 课后练习(计算部分)
  3. 中国大学MOOC计算机组成原理(计算部分)

1.教材的思维导图

1.1
1.2
1.3
1.4
1.5
1.6
在看题之前,最好先看这篇定点运算,写的特别清晰明了


2.课后练习

3.2 选择题

1.一个C语言程序在一台32位机器上运行,程序中定义了3个变量x、y、z,其中x和z为int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,x、y、z的值分别是____D____。

A. x=0000007FH,y=FFF9H,z=00000076H
B. x=0000007FH,y=FFF9H,z=FFFF0076H
C. x=0000007FH,y=FFF7H,z=FFFF0076H
D. x=0000007FH,y=FFF7H,z=00000076H

1.int占4个字节,用32位补码表示,short占两个字节,用16位补码表示。
2.目前计算机中整数采用补码进行存储、表示和运算。
3.C语言中,一般情况下,当计算类型不同时,小类型会转为大类型再计算
4.有符号小字长转大字长,机器码符号扩展

1.当x=127,[x]原=0000 0000 0000 0000 0000 0000 0111 1111=0000007FH
y=-9,[y]原=1000 00000 0000 1001=8009H
2.x是个正数,所以[x]原=[x]反=[x]补=0000007FH
y是个负数,[y]补=1111 1111 1111 0111=FFF7H
3.因为引用3,所以[y]补=FFFFFFF7H
4.由引用4得z=[x]补+[y]补=0000007FH+FFFFFFF7H=(1 舍去)00000076H

2.假定有4个整数用8位补码分别表示r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个8位的寄存器中,则下列运算会发生溢出的是___B______。

A. r1 * r2
B. r2 * r3
C. r1 * r4
D. r2 * r4
点这个>>>百度题库题目
疑似会做了,从解析来看,将其转成真值,再计算乘积,只要超过范围就说明运算发生溢出
r1=-2,r2=-14,r3=-112,r4=-8
A.r1 * r2=28
B. r2 * r3=1568
C. r1 * r4=16
D. r2 * r4=112
8位的寄存器,说明能存256个数,第一位是符号位,那么范围就是-128~127

3.某字长为8位的计算机中,已知整型变量x、y的机器数分别为[x]补=11110100,[y]补=10110000。若整型变量z=2 * x + y / 2,则z的机器数为__A__。

A. 11000000
B. 00100100
C. 10101010
D.溢出
又是一题,连题目都没看懂 (╥_╥)
点这个>>>百度题库题目
从解析来看,感觉这题主要是考算数移位,* 2就是左移1位,/2就是右移1位,所以2 * x =11101000,y/2=11011000,z=11101000+11011000=11000000,转成十进制验证,x=-24,y=-40,z=-64=11000000

4.假定带符号整数采用补码表示,若int型变量x和y的机器数分别是FFFF FFDFH和0000 0041H,则x、y的值以及x-y的机器数分别是____C____。

A. x=-65,y=41,x-y的机器数溢出
B. x=-33,y=65,x-y的机器数为FFFF FF9DH
C. x=-33,y=65,x-y的机器数为FFFF FF9EH
D. x=-65,y=41,x-y的机器数为FFFF FF96H
[x]原=1000 0000 0000 0000 0000 0000 0010 0001=-33
[y]原=1+4*16=65
[-y]补=1111 1111 1111 1111 1111 1111 1011 1111=FFFF FFBFH
[x-y]=FFFF FFDF+FFFF FFBF=FFFF FF9EH

5.整数x的机器数为1101 1000,分别对x进行逻辑右移1位和算数右移1位操作,得到的机器数各是__B____。

A. 1110 1100、1110 1100
B. 0110 1100、1110 1100
C. 1110 1100、0110 1100
D. 0110 1100、0110 1100

逻辑左移和算数左移结果一致,只需要低位填0,高位移丢
逻辑右移只需要高位填0,低位移丢
算数右移分两种情况,正数时高位填0,低位移丢;负数时高位填1,低位移丢

逻辑右移1位0110 1100
算数右移1位1110 1100

6.浮点数加减运算过程一般包括对阶、尾数运算、规格化、舍入和判断溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7位(均含2位符号位)。若有两个数X=2^7 * 29/32,y=2^5 * 5/8,则用浮点加法计算X+Y的最终结果是_D___。

A. 001111100010
B. 001110100010
C. 010000010001
D. 发生溢出
步骤题目里都已经给出来了,首先将XY都转成补码
X=2^70.90625=2 ^70.11101---->[X]浮=00111,00.11101
Y=2^50.625=2 ^50.101---------->[Y]浮=00101,00.10100
1.对阶
-[Y]补=11011
[X]补-[Y]补=[X]补+[-Y]补=00111+11011=00010=2 >0
小阶对大阶,Y阶码+2,尾数右移两位
[Y]浮=00111,00.0010100附加位,既然是0就直接舍去
2.尾数运算
[X+Y]浮=00111,01.00010
3.规格化
[X+Y]浮=01000,00.100010 (右归1位,阶码+1)
4.舍入
附加位0,直接舍去
5.判断溢出

对浮点运算而言,当阶码出现溢出时才表示运算结果溢出,即当阶码的符号位为01或10时才表示运算结果溢出。—P84

[X+Y]浮=01000,00.10001 符号位为01,那么发生了溢出

3.4 已知x和y,用变形补码计算x+y,并判断是否溢出。

[x]补+[y]补=[x+y]补= (mod M) - - -P60
[x-y]补=[x]补+[-y]补=[x]补-[y]补 (mod M) - - -P62
变形补码即用两个二进制位来进行数据的符号表示。正数的符号以’00’表示,负数的符号以’11’表示。一般称左边的符号位为第1符号位,右边的为第2符号位。
运算结果符号位为’01’,第1符号位代表正确符号位,运算发生了上溢。
运算结果符号位为’10’,第1符号位代表正确符号位,运算发生了下溢。
运算结果符号位为’11’,运算未发生溢出。 - - -P64

1.x=0.11010,y=0.10111。

[x]补=00.11010 [y]补=00.10111
[x+y]补=00.11010
+00.10111
=01.10001
符号位是01 正溢出

2.x=0.11101,y=-0.10100。

[x]补=00.11101 [y]补=11.01100
[x+y]补=00.11101
+11.01100
=00.01001
符号位是00 未溢出

3.x=-0.10111,y=-0.11000。

[x]补=11.01001 [y]补=11.01000
[x+y]补=11.01001
+11.01000
=10.10001
符号位是10 负溢出

3.5 已知x和y,用变形补码计算x-y,并判断是否溢出。

1.x=0.11011,y=0.11101。

[x]补=00.11011 [y]补=00.11101 [-y]补=11.00011
[x-y]补=00.11011+11.00011=11.11110
符号位是11 未溢出

2.x=0.10111,y=0.11110。

[x]补=00.10111 [y]补=00.11110 [-y]补=11.00010
[x-y]补=00.10111+11.00010=11.11001
符号位是11 未溢出

3.x=-0.11111,y=-0.11001。

[x]补=11.00001 [y]补=11.00111 [-y]补=00.11001
[x-y]补=11.00001+00.11001=11.11010
符号位是11 未溢出

3.6 用原码一位乘法计算x*y。

1.乘积符号与两个操作数符号存在异或关系。即Pf=x0 异或 y0
2.乘积的数值可由被乘数与乘数的绝对值之积求得。即|P|=|x|*|y| - - -P69

1.x=-0.11111,y=0.11101。
3.6.1.1笔算乘法

[x]原=1.11111
[y]原=0.11101
符号位=0 异或 1=1
|x| * |y|=0.11111*0.11101= 0.1110000011
[x×y]原=1.1110000011
[x×y]=-0.1110000011
在这里插入图片描述

3.6.1.2原码乘法器计算方法

在这里插入图片描述

2.x=-0.11010,y=-0.01011。

[x]原=1.11010
[y]原=1.01011
符号位=1 异或 1=0
|x| * |y|=0.11010*0.01011= 0.0100011110
[x×y]原=0.0100011110
[x×y]=0.0100011110

3.7 用补码一位乘法计算x*y。

根据推导Booh算法得到补码一位乘法算法:
1.乘数采用单符号位,末位增设附加位Yn+1,初值为0.
2.利用Yn+1与Yn的差值判断各步的具体运算,差值为1时,累加上[x]补;差值为0时,累加上0;差值为-1时,累加上[-x]补。累加完成后需要进行算数右移的操作,初值为0。
3.按照上述算法进行n+1次累加操作,n次右移操作即可完成乘积计算。
4.补码乘法中,符号位参与运算,不需要单独计算符号位。- - -P73

1.x=0.10110,y=-0.00011。

在这里插入图片描述

2.x=-0.011010,y=-0.011101。

在这里插入图片描述

3.8 用原码不恢复余数法计算x/y。

1.x=0.10101,y=0.11011。

这题我算出来跟答案不一样,然后百度了一圈,找到了3种答案,都贴上来,自己判断吧,我是觉得我的做法没毛病

答案1
答案2
答案3
书上的答案:在这里插入图片描述

在这里插入图片描述

2.x=-0.10101,y=0.11000。

在这里插入图片描述

3.9 设数的阶码为3位,尾数为6位(均不包括符号位),按机器补码浮点运算规则完成下列[x+y]补运算。

1.x=2^011 *(0.100100) ,y=2^010 *(-0.011010)。

首先将XY都转成补码
X=2^011 *(0.100100)---->[X]浮=00011,00.100100
Y=2^010 *(-0.011010)---------->[Y]浮=00010,11.100110
1.对阶
-[Y]阶补=11110
[X]阶补-[Y]阶补=[X]阶补+[-Y]阶补=00011+11110=00001=1 >0
小阶对大阶,Y阶码+1,尾数右移1位
[Y]浮=00011,11.110011
2.尾数运算
[X+Y]浮=00011,00.010111
3.规格化
[X+Y]浮=0010,00.101110 (左归1位,阶码-1)
4.溢出判断
阶码符号位为00,未溢出
[X+Y]补=0010,00.101110

2.x=2^-101 *(-0.100010) ,y=2^-100 *(-0.010110)。

首先将XY都转成补码
X=2^-101 *(-0.100100)---->[X]浮=11011,11.011110
Y=2^-100 *(-0.011010)---------->[Y]浮=11100,11.101010
1.对阶
-[Y]阶补=00100
[X]阶补-[Y]阶补=[X]阶补+[-Y]阶补=11011+00100=11111=-1 <0
小阶对大阶,X阶码+1,尾数右移1位
[X]浮=11100,11.101111
2.尾数运算
[X+Y]浮=11100,11.011001
3.规格化:不需要
4.溢出判断
阶码符号位为11,未溢出
[X+Y]补=11100,11.011001

3.10 采用IEEE754单精度浮点数格式计算下列表达式的值。

1. 0.625+(-12.25)

X=0.625=0.101=1.01 * 2^-1
S=0 E=-1+127=126=01111110 M=010 0000 0000 0000 0000
Y=-12.25=-1100.01=-1.10001 * 2^3
S=1 E=3+127=130=10000010 M=100 0100 0000 0000 0000
1.对阶
[X-Y]=01111110-10000010=-00000100=-4
小阶对大阶,X阶码+4,尾数右移4位
[X]浮=0.000101 * 2^3
2.尾数运算
还原隐藏位有:Mx=0.000101 My=-1.10001 Mx+My=-1.011101
3.结果规格化:不需要
4.溢出判断:不需要

对IEEE754单精度浮点数而言,向右规格化使阶码为全1(即11111111,真值为128)时发生规格化上溢。向左规格化使阶码为全0时发生规格化下溢。

X+Y=-1.011101*2^3=1100 0001 0011 1010 0000 0000 0000 0000=C13A0000H

2. 0.625-(-12.25)

X=1.01 * 2^-1
Y=-1.10001 * 2^3
1.对阶
[X-Y]=01111110-10000010=-00000100=-4
小阶对大阶,X阶码+4,尾数右移4位
[X]浮=0.000101 * 2^3
2.尾数运算
还原隐藏位有:Mx=0.000101 My=-1.10001 Mx-My=1.100111
3.结果规格化:不需要
4.溢出判断:不需要
X-Y=1.100111*2^3=0100 0001 0100 1110 0000 0000 0000 0000=414E0000H


3.中国大学MOOC计算机组成原理(计算部分)

1.已知[X]补 = 1101001 , [Y]补 = 1101010, 则用变形补码计算2[X]补 +1/2 [Y]补的结果为 (直接填二进制数即可,数字间不留空格)

这个跟书上的第三题原理一样,还更简单了
2[x]补==就是让我们对其进行算数左移1位操作
同理,1/2[y]补就是算数右移1位操作
2[x]补=1010010
1/2[y]补=1110101
两者想加得:11000111
题目没说字长,那就不需要舍去溢出位

2.‎计算机字长为8位,若 x = - 101101,则 2[x]补的值为 (直接填写二进制数)

原理同上,[x]补=11010011
2[x]补=10100110


  • 35
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值