MENU

组成原理

December 15, 2018 • Read: 412 • 计算机组成原理

考试之前没写,考完才写,服了....


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)

④舍入:无

⑤溢出:无

Archives Tip
QR Code for this page
Tipping QR Code