考试之前没写,考完才写,服了....
2018/12/15 计算机组成原理复习
设一个二进制整数补码有 n+1 位(含一位符号位 $x_n$),即
$$ [x]_补 = x_nx_{n-1} x_{n-2}...x_1x_0 $$
则其补码表示的真值为
$$ x = -2^nx_n + \sum_{i=0}^{n-1}2^ix_i $$
例 1 已知 $[x]_补 = 110011011$ 求 $x = ?$
解:利用公式求得
$$ x = -1\times2^8 + 1\times2^7+0\times2^6+0\times2^5+1\times2^4+1\times2^3+0\times2^2+1\times2^1+1\times2^0=-101 $$
例 2 设 x 为整数,$[x]_补 = 1,x_1x_2x_3x_4x_5$,若要求 $x<-16$,试问 $x_1~x_5$ 应取何值
解:利用公式得
$$ x = -1\times2^5+x_1\times2^4+x_2\times2^3+x_3\times2^2+x_4\times2^1+x_5\times2^0 $$
因为 $-1\times2^5=-32$,所以无论 $x_1~x_5$ 取何值,一定满足 $x<-16$
$[+0.0000]_补 = 0.0000$
$[-0.0000]_补 = 2+(-0.0000) = 10.0000 - 0.0000 = 0.0000$
显然 $[+0]_补 = [-0]_补 = 0.0000$,即补码中 “零” 只有一种表示形式
对于小数,若 $x = -1$,则根据小数补码的定义,有 $[x]_补 = 2+x=10.0000-1.0000=1.0000$. 可见,-1 本不属于小数范围,但却有 $[-1]_补 $ 存在,这是由于补码中的零只有一种表示形式,故它比原码能多表示一个 "-1"
例 1 写出 $[x]_补 = 1.0000$ 对应的 $[x]_原 $ 和 $x$
解:$[x]_原 $ 不存在,$x = -1$
例 2 写出 $[x]_补 = 1,0000$ 对应的 $[x]_原 $ 和 $x$
解:$[x]_原 $ 不存在,$x = -16$
设机器数字长为 8 位(含 1 位符号位在内),分整数和小数两种情况讨论 $x$ 为何值时,$[x]_原 =[x]_补 $ 成立
解:当 $x$ 为小数时,若 $x≥0$,则 $[x]_补 =[x]_原 $ 成立;若 $x<0$,当 $x=-\frac {1}{2}$,$[x]_补 = [x]_原 = 1.1000000$,则 $[x]_补 =[x]_原 $ 成立
当 $x$ 为整数时,若 $x≥0$,则 $[x]_补 =[x]_原 $ 成立;若 $x<0$,当 $x=-64$,$[x]_补 = [x]_原 = 1,1000000$,则 $[x]_补 =[x]_原 $ 成立
设浮点数格式为:阶码 5 位(含 1 位阶符),尾数 11 位(含 1 位数符)。写出 $\frac {51}{128}$、$-\frac {27}{1024}$、$-86.5$ 对应的机器数。要求如下:
(1)阶码和尾数均为原码
(2)阶码和尾数均为补码
(3)阶码为移码,尾数为补码
解:令 $x_1=\frac {51}{128}$,$x_2=-\frac {27}{1024}$,$x_3=-86.5$
(1)
$[x_1]_原 = 1,0001;0.1100110000$
$[x_2]_原 = 1,0101;1.1101100000$
$[x_3]_原 = 0,0111;1.1010110100$
(2)
$[x_1]_补 = 1,1111;0.1100110000$
$[x_2]_补 = 1,1011;1.0010100000$
$[x_3]_补 = 0,0111;1.0101001100$
(3)
$[x_1]_{阶移尾补} = 0,1111;0.1100110000$
$[x_2]_{阶移尾补} = 0,1011;1.0010100000$
$[x_3]_{阶移尾补} = 1,0111;1.0101001100$
设机器数字长为 16 位,写出下列各种情况它能表示的数的范围。设机器数采用 1 位符号位
(1)无符号数
(2)原码表示的定点小数
(3)补码表示的定点小数
(4)补码表示的定点整数
(5)原码表示的定点整数
解:
(1)$0 到 2^{16}-1$
(2)$-1+2^{-15} 到 1-2^{-15}$
(3)$-1 到 1-2^{-15}$
(4)$-2^{15} 到 2^{15}-1$
(5)$-2^{15}+1 到 2^{15}-1$
逻辑左移、算术左移、逻辑右移、算术右移的区别
- 逻辑左移 = 算术左移,右边统一添 0
- 逻辑右移,左边统一添 0
- 算术右移,左边添加符号位的值
- 逻辑移位没有溢出的说法;算术右移不会产生溢出
对于正数,三种机器数算术移位后符号位均不变,左移时高位丢 1,结果出错;右移时最低位丢 1,影响精度
对于负数,三种机器数位移后符号位均不变
- 负数的原码,左移高位丢 1 时,结果出错;右移低位丢 1 时,影响精度
- 负数的补码,左移高位丢 0 时,结果出错;右移低位丢 1 时,影响精度
- 负数的反码,左移高位丢 0 时,结果出错;右移低位丢 0 时,影响精度
设机器数字长为 8 位(含 1 位符号位),对下列各机器数进行算术左移一位,算术右移一位,讨论结果是否正确
$[x_1]_原 = 0.0011010;[y_1]_补 = 0.1010100;[z_1]_反 = 1.0101111$
$[x_2]_原 = 1.1101000;[y_2]_补 = 1.1101000;[z_2]_反 = 1.1101000$
$[x_3]_原 = 1.0011001;[y_3]_补 = 1.0011001;[z_3]_反 = 1.0011001$
解:算术左移一位
$[x_1]_原 = 0.0110100$ 正确,$[x_2]_原 = 1.1010000$ 溢出,$[x_3]_原 = 1.0110010$ 正确
$[y_1]_补 = 0.0101000$ 溢出,$[y_2]_补 = 1.1010000$ 正确,$[y_3]_补 = 1.0110010$ 溢出
$[z_1]_反 = 1.1011110$ 溢出,$[z_2]_反 = 1.1010000$ 正确,$[z_3]_反 = 1.0110010$ 溢出
算术右移一位
$[x_1]_原 = 0.0001101$ 正确,$[x_2]_原 = 1.110100$ 正确,$[x_3]_原 = 1.1001100$ 影响精度
$[y_1]_补 = 0.0101010$ 正确,$[y_2]_补 = 1.1110100$ 正确,$[y_3]_补 = 1.1001100$ 影响精度
$[z_1]_反 = 1.1010111$ 正确,$[z_2]_反 = 1.1110100$ 影响精度,$[z_3]_反 = 1.1001100$ 正确
设机器数字长为 8 位(含 1 位符号位),用补码运算规则计算下列各题
(1)$A = \frac {9}{64},B = -\frac {13}{32}$,求 $A + B$
(2)$$A = \frac {19}{32},B = -\frac {17}{128}$$,求 $A - B$
(3)$A = -87,B = 53$,求 $A - B$
(4)$A = 115,B = -24$,求 $A + B$
解
(1)由于 $A = 0.0010010,B = 1.0110100$,所以 $[A]_补 = 0.0010010,[B]_补 = 1.1001100$,则 $[A+B]_补 = 1.1011110$,即 $A + B = 1.0100010$
(2)由于 $A = 0.1001100,B = 1.0010001$,所以 $[A]_补 = 0.1001100,[-B]_补 = 0.0010001$, 因为 $[A-B]_补 = [A]_补 + [-B]_补 = 0.1011101$,即 $A - B = 0.1011101$
(3)由于 $A = 1,1010111,B = 0,0110101$,所以 $[A]_补 = 1,0101001,[-B]_补 = 1,1001011$,则 $[A]_补 + [-B]_补 = 0,1110100$ 溢出
(4)由于 $A = 0,1110011,B = 1,0011000$,所以 $[A]_补 = 0,1110011,[B]_补 = 1,1101000$,则 $[A+B]_补 = 0,1011011$,即 $A + B = 0,1011011$
设 $x = 2^{-101}\times (-0.101000),y = 2^{-100}\times (+0.111011)$,假设阶符取 2 位,阶码数值部分取 3 位,数符取 2 位,尾数的数值部分取 6 位,求 $x-y$
解:$[x]_补 = 11,011;11.011000,[y]_补 = 11,100;00.111011$
①对阶:小阶向大阶对齐,则 $[x]_补 ^{'} = 11,100;11.101100$
②求和:
$$ [S_x]^{'}_补 - [S_y]^{'}_补 = [S_x]^{'}_补 + [-S_y]^{'}_补 \\ =11.011000+11.000101=10.110001 $$
即 $[x-y]_补 = 11,100;10.110001$,尾数符号位出现 "10",需右规
③格式化:右规后得 $[x-y]_补 = 11,101;11.011000$
④舍入处理:采用 “0 舍 1 入” 法,其尾数右规时末位丢 1,则有 $[x-y]_补 = 11,101;11.011001$
⑤溢出判断:补码表示的阶码符号位为 11,不溢出
按机器补码浮点运算步骤计算 $[x\pm y]_补 $
(1)$x = 2^{-011}\times 0.101100,y = 2^{-010}\times (-0.011100)$
(2)$x = 2^{-011}\times (-0.100010).y = 2^{-010}\times (-0.011111)$
解:
(1)$[x]_补 = 11,101;00.101100,[y]_补 = 11,110;11.100100$
①对阶,$[x]_补 = 11,110;00.010110$
②尾数运算:$[x+y]_补 = 11,110;11.111010,[x-y]_补 = 11,110;00.110010$
③规格化:$[x+y]_补 = 11,011;11.010000$(尾数左规 3 次,阶码减 3);$[x-y]_补 $(不变)
④舍入处理:无
⑤溢出:无
(2)$[x]_补 = 11,101;11.011110,[y]_补 = 11,110;11.100001$
①对阶:$[x]_补 = 11,110;11.101111$
②尾数运算:$[x+y]_补 = 11,110;11.010000,[x-y]_补 = 11,110;00.001110$
③规格化:$[x+y]_补 = 11,110;11.010000$(不变);$[x-y]_补 = 11,100;00.111000$(尾数左规 2 次,阶码减 2)
④舍入:无
⑤溢出:无