计算机组成原理笔记
本文随机更新机组笔记
CH2数据表示
定点数与浮点数
定点数
小数点的位置固定不变,有两种形式,定点小数和定点整数. 定点整数要求小数点在数据最低有效数位之后。 $00101001.$ 定点小数要求小数点在数据最高有效数位之前。 $0.1111111$
浮点数
基数为2的数F,浮点表示为 $F = M \times 2^E$ 其中M为尾数,E为阶码。尾数为带符号的纯小数,阶码为带符号的纯整数。按照上式表示的数字既可以是纯整数,也可以是纯小数,因此小数点位置不固定,所以称为浮点数。
在计算机中,常用的一种浮点数表示方法为
数符 | 阶符 | 阶码数值部分 | 尾数数值部分 |
---|---|---|---|
1 | 1 | k | n |
阶码和尾数的数值范围为
阶码与尾数 | 数值 | 阶码与尾数 | 数值 |
---|---|---|---|
阶码最小值 | $-2^k$ | 阶码最大值 | $2^k-1$ |
尾数最小负值 | $-1$ | 尾数最大负值 | $-2^{-n}$ |
尾数最小正值 | $+2^{-n}$ | 尾数最大正值 | $+(1-2^{-n})$ |
因此可以得到浮点数表示的数值范围: 最小负数:$-2^{2^k-1}=-2^{阶码最大值}$
最大负数:$-2$
因此浮点数编码位数位 $m=(n+1)+(k+1)$
补码
补码的特点:
-
n位补码表示的整数数值范围为$[-2^{n-1},2^{n-1}-1]$
n位补码表示的小数数值范围为$[-1,1-2^{-n+1}]$
-
在补码中0的表示是唯一的
-
变形码,当模数为4时,可以形成双符号位补码,11表示负,00表示正,当两个符号位不同时表示运算溢出,又叫做变形补码。待更
-
求补运算,处理器中有求补指令,其功能是对操作数取负数(所有位变反+1)
-
简化加减法 $[X+Y]_补= _补+[Y]_补$
移码
当一个数字的正数所对的二进制与负数所对的二进制直接比较大小时,会出现负数所对的二进制更大的情况。例如对于十进制数31
$10011111_{-31} > 01100001_{31}$
如果对负数补码上加上一个偏移量,再进行比较即可反应实际情况。
定义为: 对于包括符号位在内的n位字长,在其真值上加上$2^{n-1}$ $[X]_移 =2^{n-1}+X$
特点: $[X]_移<符号为取反>[X]_补$
纠错码
若有n位数据,添加k位校验位,共有n+k位编码
海明距离: $d = |x-y|=\sum_{i=0}^{m-1}|x_i-y_i|$
可以使用位运算异或求解,获得海明距离
奇偶校验码
奇校验:设 $X = x_0x_1x_2x_3x_4…x_{n-1}$ 是一个n位字,在最高位添加一位奇校验c使得 $X’=cx_0x_1x_2x_3x_4…x_{n-1}$ 有 $c \oplus x_1\oplus … \oplus x_{n-1} = 1$
偶校验则相反,只能判断是否出错,无法纠错
海明校验码
对于16位数据,用 $D_{16}-D_{0}$ 分别表示高位到低位,要使其拥有1位纠错功能,则需要在有效信息中添加5个校验位,H4~H0 此时海明码的码长为 $m=n+k=16+5=21$
循环冗余校验码
大概就是用一个性能比较好的生成多项式构造一个编码,利用模2除法的余数进行校验,而且纠错性能不是100%,先Pass
运算方法和运算器
加减运算
利用补码的性质,可以将运算转化为补码的加法。
$[X+Y]_补=[X]_补+[Y]_补$
这里有一个需要区分的概念,求补运算和求补码的区别
求补:对一个正数求补,令其包括符号位在内的各位取反再加1,即可得到该数的负数,若对该负数再求补,可以得到原来的正数。
$[[X]_补]_求=[-X]_补$
同理有
$[[-X]_补]_求=[X]_补$
可以总结出补码减法的运算法则为
$[X-Y]_补 = [X]_补+[-Y]_补 =[X]_补+[[Y]_补]_求$
因此可以将减法转化为加法运算
溢出判断
只有两个符号相同的数字相加,或者符号相异的数相减才有可能发生溢出。 若分别用xyz表示三个数字的符号位,可得标准最小项 $\overline{x} \cdot \overline{y} \cdot z+x\cdot y\cdot \overline{z}$ 只有该式为真时,将发生溢出。
双符号位判定
每个数字有两个符号位,其中00表示正数,11表示负数 令OF OverflowFlag表示溢出符号 $S_1,S_2$ 分别表示运算结果的两符号, 有 $OF = S_1 \oplus S_2$
进位符号判定
$令 C_{n-1}表示最高数值位产生的进位,C_n表示符号位产生的进位$ 即有 $OF = C_{n-1}\oplus C_n$
一位全加器
计算每一位逻辑 $Z_i=X_i\oplus Y_i \oplus C_i$ 进位信号通过递推产生 可以设计出简单的行波式进位加法器,从最低位开始传递进位信号,是异步时序电路,因此运算速度比较慢。
在位数已知的情况下,可以设计电路一次性计算出所有的进位信号,比较理想的情况是以四个位数为一组,该电路增长量级太大,如果需要更多位数可以利用多个该电路组合使用,组成组内并行组间串行进位加法器。