0 1 2 3 4 初始数值 加[-x]补 右移 加[x]补 右移 加[-x]补 右移 加[x]补 右移 00000101 00110101 00011010 11101010 11110101 00100101 00010010 11100010 11110001 0 0 1 1 0 0 1 1 0 即[xy]补=11110001, xy=-1111
(3) [x]补=0011,[y]补=1011,[-x]补=1101 0 1 2 3 4 初始数值 加[-x]补 右移 无操作 右移 加[x]补 右移 加[-x]补 右移 00001011 11011011 11101101 11101101 11110110 00100110 00010011 11100011 11110001 0 0 1 1 1 0 0 1 1 即[xy]补=11110001, xy=-1111
(4) [x]补=1101,[y]补=1011,[-x]补=0011 0 1 2 3 4 初始数值 加[-x]补 右移 无操作 右移 加[x]补 右移 加[-x]补 右移 00001011 00111011 00011101 00011101 00001110 11011110 11101111 00011111 00001111 0 0 1 1 1 0 0 1 1 即[xy]补=00001111, xy=1111
9. 已知x和y的二进制值,计算[x/y]原。 (1) x = 1010,y = 0011 (2) x = 1001,y = 0010
答:(1) [x]原=01010,[y]原=00011,[-y]补=11101
循环 0 步骤 初始值 左移,商0 减[y]原 余数 00000 01010 00000 10100 11101 10100 1 2 3 4 5 加[y]原,商0 左移 减[y]原 加[y]原,商0 左移 减[y]原 加[y]原,商0 左移 减[y]原 商1 左移 减[y]原 商1 左移 R0右移 00000 10100 00001 01000 11110 01000 00001 01000 00010 10000 11111 10000 00010 10000 00101 00000 00010 00000 00010 00000 00100 00001 00001 00001 00001 00001 00010 00011 00001 00011 即:[x/y]原=00011
(2) [x]原=01001,[y]原=00010,[-y]补=11110 循环 0 1 2 3 4 5 步骤 初始值 左移,商0 减[y]原 加[y]原,商0 左移 减[y]原 加[y]原,商0 左移 减[y]原 商1 左移 减[y]原 加[y]原,商0 左移 减[y]原 加[y]原,商0 左移 R0右移 余数 00000 01001 00000 10010 11110 10010 00000 10010 00001 00100 11111 00100 00001 00100 00010 01000 00000 01000 00000 01000 00000 10001 11110 10001 00000 10001 00001 00010 11111 00010 00001 00010 00010 00100 00001 00100 即:[x/y]原=00100
15 按浮点数运算的步骤计算18.4+90.2,浮点数的编码为1位符号位,6位移码编码的阶码,9位尾数,运算器中有4位尾数的保护位并采用冯?诺依曼舍入法。 答:18.4 = 10010.0110011 = 25?0.100100110 [18.4]浮 = 100101, 0.100100111
90.2 = 1011010.00110011 = 27?0.101101001 [90.2]浮 = 100111, 0.101101001
(1) 对阶
[18.4]浮 = 100111, 0.0010010011100 (2) 尾数相加 0.0010010011000 + 0.1011010010000 = 0.1101100101100 (3) 规格化。尾数已经符合规格化要求。 [18.4+90.2]浮 = 100111, 0.1101100101100 (4) 舍入 [18.4+90.2]浮 = 100111, 0.110110011 (5) 检查溢出。没有溢出,结果为 100111, 0.110110011 = 1101100.11 = 108.75
注:这个结果虽不精确,但是正确的。
16. 设x=5.5,y=-0.12,用浮点数乘法运算步骤计算xy。浮点数的编码格式是:1位符号位,4位补码表示的阶码,7位尾数与符号位构成原码编码,运算器中有7位保护位,采用0舍1入的舍入法。
答:x = 101.12 = 0.1011000×23
[x]浮=0011, 0.1011000
y = -0.00011110101112 = -0.1111011×2-3 [y]浮=1101, 1.1111011 (1) 阶码相加,得
1011 + 0101 = 0000 (2) 尾数相乘,得 0.1011000×1.1111011 = 1.10101001001000 (3) 规格化,已经符合规格化要求,即 [xy]浮=0000, 1.10101001001000 (4) 舍入,得
[xy]浮=0000,1.1010101 (5) 检查溢出,没有溢出,最后结果为 -0.10101012×20 = -0.6640625
18. 两个64位的包装字中都包含4个16位的无符号数据字段,编码分别为00017777CCCCFFFF16和00AA77771111800016,分别求其截位加法和饱和加法的结果。 答:截位加法:
0001 7777 CCCC FFFF
+ 00AA 7777 1111 8000 00AB EEEE DDDD 7FFF 饱和加法:
0001 7777 CCCC FFFF
+ 00AA 7777 1111 8000 00AB EEEE DDDD FFFF
19. 对于上题的两个包装字,若进行包装字的相等比较,结果是什么? 答:0000 FFFF 0000 0000
20. 设64位的包装字中包含4个16位的无符号数据字段,编码为00017777CCCCFFFF16,求其进行包装字左移1位和右移一位操作之后的结果。 答:左移1位:
0020 EEEE 9998 FFFE 右移1位:
0000 3BBB 6666 7FFF
第5章
5. 存储器芯片的容量通常用a×b的方式表示,其中a为字数,b为每个字的位数。以下几种存储器芯片分别有多少地址线和数据线?
(1) 2K×16 (2) 64K×8 (3) 16M×32 (4) 4G×4
答:地址线数量根据存储器的字数计算,数据线的数量等于存储器的位数。
(1) 11条地址线,16条数据线。 (2) 16条地址线,8条数据线。 (3) 24条地址线,32条数据线。 (4) 32条地址线,4条数据线。
9. 假定计算机系统需要512字节RAM和512字节ROM容量。使用的RAM芯片是128字×8位,ROM芯片为512字×8位。RAM芯片有CS*及WE*控制端,ROM芯片有CS*控制端,CPU有地址线A15~A0、数据线D7~D0、读写控制线RW*等,试确定各存储器芯片的地址区间,指出存储器以及各存储器芯片需要的地址线数量,并画出存储器与CPU的连接图。 答:存储器需要4片RAM芯片和1片ROM芯片。为了区别不同的RAM芯片以及ROM芯片,必须给每个芯片设置不同的地址区间。各存储器芯片的地址区间安排情况如下表所示:
元件 RAM1
RAM2 RAM3 RAM4 ROM
16进制地址范围 0000~007F 0080~00FF 0100~017F 0180~01FF 0200~03FF
二进制地址值 0 0 0 x x x x x x x 0 0 1 x x x x x x x 0 1 0 x x x x x x x 0 1 1 x x x x x x x 1 x x x x x x x x x
表中元件一栏列出芯片的类型,16进制地址范围一栏列出每个芯片对应的地址范围,二进制地址值一栏表示选择每个芯片的地址信号逻辑值,其中的x表示对于选择芯片,这些地址线可取任意值,但这些地址线要输入到芯片中,用于选择芯片内的存储单元。存储器的总容量为1KB,需要10条地址线,如果CPU有更多的地址线,多余的高位地址线可以空置不用。RAM芯片需要7条信号线(27=128),ROM芯片需要9条地址线(29=512)。存储器与CPU的连接图如下。