王道考研专业课-计算机组成原理

发展历程

从技术角度分析,计算机硬件的发展阶段

  1. 电子管阶段
  2. 晶体管阶段
  3. 中小规模集成电路阶段
  4. 大规模、超大规模集成电路阶段

计算机目前朝着微型多功能和巨型超级计算的方向发展

计算机组成

早起冯诺依曼机

在这里插入图片描述

冯·诺依曼计算机特点:

  1. 指令和数据无差别的存储到主存中,均可按址寻数据
  2. 指令和数据以二进制方式存储在主存中
  3. 指令由地址码和操作码组成,也可能包含多个地址
  4. 程序在运行之前会提前存储到主存中,即存储程序
  5. 5部分构成
  6. 以运算器为中心(现代计算器以存储器为中心)

数据的输入和输出都需要经过运算器,会造成效率的降低

现代计算机结构

概念含义
主机cpu(控制器和运算器),主存(内存)
存储主存(内存)和辅存(机械硬盘,固态硬盘)
IO设备包括机械硬盘,固态硬盘,输入输出设备
输入设备将输入信息装换为计算机能识别的形式
输出设备将计算结果转为人们熟悉的形式
主存储器存放数据和程序
运算器算数运算和逻辑运算
控制器调度各部件使程序运行

主存储器的基本组成

包括,地址存储器(MAR),数据寄存器(MDR),存储体
读取数据过程
将要读取的数据的地址输入到地址存储器,主存器根据地址将数据取出后放在数据寄存器
写入数据过程
将要输入到主存的数据放在数据寄存器,将要存放的位置写到位置寄存器
存储体
存储体中的数据是按照地址进行存储的,每个地址对应一个存储单元,每个存储单元存放一串二进制代码,每串二进制代码代表一个存储字(word)
每个存储字所存储的二进制的长度叫做存储字长一般都是8bit的整数倍
每个电子存储元可以存储一个bit
易混点
1Byte/B = 8bit/b ,即 1字节 = 8比特

运算器的基本组成

组成含义
ACC累加器,用于存放操作数和运算结果
MQ乘商寄存器,在乘除寄存器时用于存放操作数和运算结果
X通用操作数寄存器,用于存放操作数
ALU算数逻辑单元,通过内部复杂的电路实现,算数计算和逻辑计算

控制器的组成

组成含义
CU控制单元,分析指令,给出控制信号
IR指令寄存器,存放当前执行的指令
PC程序计数器,存放下一条指令地址,有自动加1的功能

完成一条指令的过程,通过PC中存储的指令地质取指令,将指令存放在指令控制器中,CU通过指令控制器来分析指令,进而给出控制信号

在一个运算程序中,运算器、控制器和存储器是如何协调工作的?
取指令
根据PC存储地址,取指令,同时PC+1
分析指令
放入IR进行指令分析,拆分指令内容中的操作码和地址码,
执行操作
操作码给CU进行对应操作,地址码进行对应数据的获取并交给CU进行计算

计算机系统的层次

高级语言–>汇编语言–>操作系统–>机器语言–>微指令程序
将操作系统及之上的称为软件,之下的称为硬件;
汇编语言和机器语言是一一对应的

计算机的性能指标

主存
  1. MAR(地址寄存器)的位数,反映了主存的最大存储量;
  2. MDR(数据寄存器)的位数,反映了每个存储地址存储数据的大小(word)
    主存的容量 = MAR * MDR
    1K = 210 Bytes 1Byets = 8bits
CPU性能指标

CPU主频,cpu脉冲的指令
cpu的一个震荡周期被称为cpu的一个时钟周期
每条指令最少跨越一个时钟周期
CPI执行一条指令所需要的平均时钟周期数
IPS每秒钟可以执行多少条指令,主频/时钟周期
flops每秒钟执行多少次浮点运算
在描述计算频率时,K=103 M=106 G=109 T=1012;每次相差103;
存储容量,K=210 M=220

系统整体的性能指标

数据通路带宽:数据总线(cpu和主存之间的通路)一次所能并行传送信息的位数;
吞吐量:系统在单位时间内处理请求的数量
响应时间: 用户向计算机发送请求到系统对该指令做出响应并获取结果的等待时间;
基准程序有时候会有一定偏见(比如显卡程序过多等等)

基准程序来测试(跑分软件)

tips
衡量计算机性能需要从 主频,CPI,指令系统来衡量;

进位计数制

位权重
不同进制数据的转化
二进制转为 8进制、16进制;三位为一组,4位位一组
8进制转为2进制;每一位拆分为3位
16进制转为2进制;没一位转为4位
书写方式:1. 数字角标来表示;2. 16进制 h打头,10进制d打头;
10进制转其他进制,整数部分使用除基取余法,先得到小数部分;小数部分乘2取整数,最先得到高位;拼凑法
在这里插入图片描述
真值:符合人类习惯的数字
机器数:数字实际存到机器里的形式;正负号需要被“数字化”,放在首位

BCD码

解决十进制数字如何在计算机中表示
8421码
4个二进制码 对应一个十进制位
8421码的运算,如果使用二进制的加法运算之后,结果落在1010~1111(10-15)之间,就没有意义,需要对结果 + 0110(+6),这样结果就会往高位进1,得到高位对应的10进制的值。考试时候可以通过先转为10进制,运算之后转为2进制的方法;
余3码:8421码 + (0011);无权吗
2421码:2421分别对应每一位的权值,和8421码都是有权码;为了规避一对多的情况,表示0-4时最高位为0,表示5-9时z最高位为1

字符和字符串如何在计算机中表示

ASCII码

键盘上的数字字母和符号一共128个,所以使用7位二进制编码就可以表示一个字符或数字,通常会在高位拼一个0凑够一个字节;

ASCII码就是128个字符
其中32-126是可印刷字符,其余用于控制和通信;
48-57用来表示阿拉伯数字0-9;即使用0011 0000-0011 1001;其前4位固定为0011,后四位是8421码;
大写字母:65(0100 0001)-90(01011010)前3位都是相同的,仅从后面5位看 依次为 1-26
小写字母:97(0110 0001)-90(01111010)前3位都是相同的,仅从后面5位看 依次为 1-26

GB2312

汉字+符号共7445个

  1. 区位码:94个,每区94个位置;通过区位码来表示对应的字符;
  2. 区码和位码都从32(20H)开始,可以避免计算机误以为接收到了控制或通信指令;此时得到国标码;此时可以用来数据传输
  3. 在之前的基础上 +32(80H),避免了和ASCII码的冲突;得到汉子内码此时就可以存储在计算机;
  4. 汉子字形码,不同像素位置对应一个像素表示;

字符串

一个字节对应一个字符串,从左往右一次存储;很多语言中,通过‘\0’表示字符串的结束
一个中文字符对应两个字节;这两个字节有两种存储方式,大端模式(将数据的最高有效字节存放在地地址单元)和小段模式;

数据校验

校验原理介绍

概念:由若干位代码组成的一个字叫做码子
将两个码子逐位进行对比,具有不同的位的个数称为两个码字间的距离
一种编码方案由若干种合法的码字组成,各合法码字间的最小距离称为码距,码距越小越传输越不可靠

奇偶校验码

奇校验:整个校验码(有效为+校验位)中 ‘1’的个数为奇数个
奇校验:整个校验码(有效为+校验位)中 ‘1’的个数为偶数个
偶数个数据发生错误,奇偶校验码会检测不出来

计算机中如何实现奇偶校验

使用异或(摸2加)来计算;
获取位偶校验位:将所有位进行异或运算之后得到的结果
校验偶校验码:将所有位(包括校验位)进行异或运算之后得到的结果为0;

海明码

设计思想:基于奇偶校验的问题,只能够校验出奇数位出现问题,并且不知道哪一位出现问题;如果一种校验码既可以更多的校验出问题,并且可以校验出编码出问题的地方,就更好了;海明码,采用分而治之的方法,将数据分为多组,分别对应一个校验码。

特点及使用场景:1位纠正2位检错,2位错误以上的情况没有考虑,所以它也仅用于通信特性较好的环境中

校验位数量: 理想情况下海明码想要校验出任何一个数据位是否出错,所以需要分组的数量为 信息位数(n)校验位数(k),那么校验位的所有可能为2k个,那么 2k ≥ K + N + 1;(最后的1表示任何一位都是正确的状态)

校验位的分布: 校验位Pi放在海明位号为2i-1的位置上,信息位按照顺序放到其余位置;

信息数据如何分组:每个校验位都会对应一个权值;将数据位的位置用二进制的方式表示,数据位位置(二进制)对应校验位权值为1的数据分为一组;(同一个数据位被同时分到多个组中)

求校验位的值: 将同一分组的数据求异或,得到该分组的校验位的值

纠错
校验方程:将不同分组的数据及校验码一次求异或,校验结果Sn…,S2,S1都为0,那么数据为真;如果其中一个不为零,那么将Sn…,S2,S1组成的二进制结果的位置就是数据出错的位置

全校验位:海明码只能纠正一位错误的情况,为了检查是一位错误还是两位,添加全校验位(奇偶校验法);2位以上的错误情况很少发生没有考虑;

循环冗余校验码(CRC码)

算法思想:传输的时候规定一个除数,数据辗转相除得到最后的余数作为校验码传给接收方,接收方接受到数据之后将数据+校验码进行辗转相除,余数是否为0,如果不为0说明数据有误,可以重传或单字节的纠错;
通常该校验码只用来检错,不用来纠错

校验码的确定:一般被除数是传输端和接收端通过协商来确定的,题目中一般通过一个多项式的权重来表示,如下在这里插入图片描述
将信息数据往左移动多项式的最高次幂个位置,将这个结果对生成二进制码进行模2除法,得到的余数就是校验码;

模2除法:和辗转相除法类似,先做除法,这里的除法只需要保证最高位都为1就可以,减法操作和摩尔加法操作一样,每一位都遵循异或算法。
校验:对接受到的数据进行模2除,得到的结果为0,表示数据正确;
余数和出错位置的关系:余数为0表示没有出错;余数为1,表示第一位或者第 余数最大值*n+1位的数据出错(所以该校验方式被称为循环冗余校验)但是数据的位数没有超过余数的可能位数,余数就对应错误校验位的位置。即,若2R ≥ K+R+1,则CRC码可纠正单比特错误
检错纠错能力
检测所有奇数个错误
所有双比特错误
检测所有小于校验位长度的连续错误

定点数和浮点数

定点数:小数点的位置固定
浮点数:小数点的位置不固定。科学计数法

无符号数的表示(int, long)

n位无符号数表示范围: 0 ~ 2n - 1

有符号数(定点表示)

原码

用尾数表示真值的绝对值,符号位“0/1”对应“正/负”,一般位于第一位。若机器字长为n+1位,则尾数占n位。

定点整数

原码所能表示的数的数量为 2n+1-1个,因为正负0仅仅对应一个真值数 0;原码整数的表示范围:-(2n-1) ≤ x ≤ 2n-1

定点小数

若机器字长n+1位,原码小数的表示范围:-(1-2-n)≤ x ≤ 1-2-n;

反码

若符号位为0,即正数,原码和反码一致
若符号位位1,即负数,反码是原码的数值全部取反
反码仅仅是原码转为补码的一种中间状态,实际中并没有用

补码

正数的补码 = 原码
负数的补码 = 反码末位 + 1(考虑进位)
补码中仅有一种状态对应真值0;
定点整数补码[x] = 1,0000000表示 -27所以补码的范围为 -2n ≤ x ≤ -2n-1;定点小数补码同样存在这个问题,多表示一个-1
补码转换为原码,是同样的操作,补码取反,之后+1;
负数的补码,从右数第一个为1的位置及其右边都和原码保持一致,左边都和原码相反。(小数和整数都一样)

移码

补码的基础上将符号位取反。注意:移码只能表示整数
移码可以方便计算机对比其所代表的真值的大小(遍历权值位依次对比直到产生结果)

补码取负操作

将所有位取反,末位 +1
在这里插入图片描述

原反补码的作用

  1. 纠正有符号数的加法运算
  2. 使用加法的硬件 + 软件 实现减法操作

模运算的性质

mod(12) 相当于把所有的数据分为12份(组)
设x,m∈Z,m > 0,则存在唯一决定的整数q和r,使得 x = qm + r, 0≤ r <m;m即mod值,r为数论中余数;如果x1、x2求得的r相同,那么两者等价;如果二者绝对值之和 = 模,那么二者互为补数。
那么就可以将减a操作转换为,加上(模-a)得到的结果再取模是等价的。

补码的作用

而计算机的mod28;而进行28 - a操作相当于对a取补码

移位运算

算数移位

右移N位相当于 将原值 / 基数N,低位舍弃,高位补0;如果舍弃位=0,则相当于除以2,若舍弃的位≠0,则丢失精度。
左移N位相当于 将原值 * 基数N,低位补0,高位舍弃,如果舍弃位=0,则相当于乘基数,若舍弃的位≠0,则严重丢失精度。

反码的算数移位

负数反码的补位,补1,而不是补0

补码的算数移位

由于补码计算过程的原因,低位知道第一个1的位置和原码相同,其余和反码相同。所以在移位时,低位补0,高位补1。

算数移位的应用:
-20 x 7 等价于 -20 x (2 2 + 21 + 2 0);即相当于 -20 左移1位 + (-20 左移2位) + (-20 左移0位)

逻辑移位

逻辑右移:高位补0,低位舍弃
逻辑左移:低位补0,高位舍弃

循环移位

二进制位循环;
带进位位的循环左移,单独一个位置,存放在进位位
实现大端存储和小端存储的转换

加减运算

原码的加减运算

原码的加法运算太复杂,计算机中通常是通过补码来进行加法运算的;
[A + B] = [A] + [B]
[A - B] = [A] + [-B]

溢出判断

设机器字长为8位(含一个符号位),所以该字长的补码 能表示 -128到127的数字;但是如果两个正数相加超过127,或者两个负数相减小于-128,那么该运算为溢出运算;
两个正数相加得到负数,
两个负数相加得到正数
即用符号表示为:
判断方法1: 加数的符号位As,被加数的符号位Bs,运算结果的符号位Ss
V = AsBs[-Ss] + [-As] [-Bs]Ss
判断方法2: 符号位的进位s,和最高数值位的进位i;s和i不同时有溢出;用硬件中的异或来判断是否溢出;
判断方法3: 双符号位来判断是否溢出,和方法2类似;计算机存储的还是单符号,只是运算的时候复制了一份;模4补码,有两个符号位的补码运算
模2补码:只有一个符号位的补码

溢出问题解决

符号位扩展

定点整数的扩展,负整数,原码左边补8个0,反码左边补8个1,补码左边补8个1
定点小数的扩展,负小数:原码右边补8个0,反码右边补8个1,补码右边补8个0(和原码保持一致)

原码的乘法运算

原码的一位乘法: 每次参与运算的只有乘数的一个位;进行n轮的加法和移位运算
乘法结果的高位在ACC中,乘法结果的低位在MQ中

补码的乘法运算

补码的乘法运算中,除了进行n轮加法运算之后还会再多来一次加法运算;最终得到包含符号位的结果的补码;

定点小数源码的除法

只能进行定点小数的运算,但是如果除数比被除数小,那么电路检测到之后就会直接停止;
余数恢复法
加减交替法 / 不恢复余数法(是对余数恢复的优化)
最后一位如果为0,两个算法都需要进行余数的恢复
余数和商的符号是相同的

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岳大博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值