这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战
考研倒计时:46天
参考资料: 王道计算机组成考研
下面主要来总结计组数据表示和运算这一章,个人感觉计组这一门最最最头疼的一章,头大~
本篇先总结数值与编码,重点会计算校验码。然后是ALU,总结加法器的功能原理以及OF/SF/CF/ZF这四个标志位的含义,大题会经常考到,利用加法器来与加减法运算进行结合,或者与if语句判断进行结合。
后面会用一两篇总结定点数的运算和浮点数的运算。(瘫~)
数值与编码
- 首先掌握不同进制数之间的相互转换
除基取余法(整数部分的转换):从上到下是---最低位到最高位
乘基取整法(小数部分的转换):从上到下是---最高位到最低位
- 知道常见的校验码
这里可以与计算机网络的差错控制相结合
码距:如1100和1101之间的码距为1,1001和0010之间的码距为3(因为只有一位没有变化)
奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数
缺点:只能发现奇数位的出错,不能纠正错误!
海明码
纠错理论:L-1=D+C且D>=C
编码最小码距L越大,其检测错误的位数D越大,纠正的错误的位数C越大,且纠错能力恒小于等于检错能力。
求海明码的步骤:
1. 确定海明码的位数
$n+k<=2^k-1$
2. 确定校验位的分布
规定校验位Pi放在$2^{i-1}$的位置上
3. 分组以形成校验关系
4. 校验位取值
每一组进行异或得到的值为相应的Pi值
5. 最后进行校验
比如S3S2S1的值为001,说明第一位出错,即H1出错。
循环冗余校验码
基于线性编码理论
需要一个生成多项式 ,比如生成多项式对应的二进制数为1101 ,而1011对应的多项式为
求CRC码步骤:
1. 移位
信息码后面加R位的0. 校验位R为生成多项式的最高次数
2. 相除
这里是模2除法,和算术除法不同的是,不借位,不会对其他位造成影响,所以可以通过异或进行运算。
余数最高位为1,商为1. 最后得到一个余数。
3. 检错和纠错
将数据与生成多项式的二进制码进行相除,比如得到010,说明C2出错。
运算器ALU
ALU的核心部件是加法器
一位加法器
全加器FA是最基本的加法单元,有加数,加数与低位传来的进位共三个输入,有本位和与向高位的进位共两个输出。
进位表达式:
- 串行加法器:只有一个全加器,器件少成本低,但运算速度慢
- 并行加法器:运算时间主要由进位信号传递时间决定,进位分为串行进位(行波进位)与并行进位(先行进位)。
并行进位又可分为单级先行进位方式(组内并行、组间串行)和多级先行进位方式(组内并行、组间并行)
带标志的加法器
以下电路原理图片来源啧啧卡
无符号数加法器只能用于两个无符号数相加,不能进行带符号整数的加减运算。
在这个带标志的加法器我们可以实现带符号数的加减运算。
需要注意的tip:
- SF和其他位结合可以判断溢出,SF和OF结合可以判断大小
- SF为
- 进位/借位
算术逻辑单元
下图需要注意的是ALUop有两位,可以对应八种操作
补码加减运算部件
控制端Sub=0做加法:X+Y = 【x】补+【y】补
sub=1做减法:X+反Y+1 = 【x】补+【-y】补
需要注意的tip:
- 无符号整数的二进制相当于正整数的补码表示,所以此部件也可以用来无符号数的加减运算。
- 对于有符号整数x和y,输入的是x和y的补码
- ZF=1表示结果为0,无符号和有符号都有意义
- CF可以表示无符号数运算的进位/借位。CF=1表示无符号加法的溢出,即进位输出Cout;减法时,CF=1表示有借位,不够减。总之CF=1表示溢出。但是对于带符号数无意义。
- OF=最高位异或次高位。OF=1表示溢出。对于无符号OF以及SF没有意义。
- 前面提到SF和OF结合可以判断大小,当OF=0无溢出的时候,SF=1表示为负,即第一个数比第二个数小。联想到if语句:if(i<n)。具体可以结合2013年等408大题!
部分内容待补充完善~
如有误,请多指正!