计算机组成原理
第一章 计算机概论、
1. 什么是计算机系统
计算机系统
= 硬件+ 软件
计算机性能的好坏取决于“软”、“硬件”功能的组和
A. 软件:
系统软件
:用来管理整个计算机系统
Eg:操作系统、数据库管理系统、标准程序库
应用软件
:按任务需要编制成的各种程序
2. 硬件的发展
🔰 第一代:电子管时代
体积超大、耗电量超大
逻辑原件:电子管
🔰 第二代: 晶体管时代
体积减小,功耗降低 ,出现面向过程的程序设计语言:FORTAN
🔰 第三代 :中小规模集成电路
可靠性提高,高级语言迅速发展
🔰 第四代:大规模、超大规模集成电路时代
开始出现“微处理器”、微型计算机、PC
3. 软件的发展
机器语言 汇编语言
4. 计算机硬件的基本组成:
早期 冯*诺依曼机:
存储程序
的概念是指将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束
冯诺依曼机结构:
输入设备:将信息转化成机器能识别的形式。
存储器:存放数据和程序。
运算器:算术运算、逻辑运算。
输出设备:将结果转换成人们熟悉的形式。
控制器:只会程序运行。
在计算机系统中,软件和硬件在逻辑上是等效的。
冯诺依曼计算机的特点:
- 计算机由五大部件组成
- 指令和数据以同等地位存于存储器。可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序
以运算器为中心
现代计算机的机构:
现代计算机:以存储器为中心
简化后:CPU = 运算器 + 控制器
主存(主机):是内存
此处的主机不是生活当中所指的主机
辅存(应当看为I/O设备):硬盘
5. 各个硬件的工作原理:
A:主存储器的基本组成
主存储器:
- 存储
地址
寄存器(MAR)
MAR位数 = 存储单元的个数
- 存储
数据
寄存器 (MDR)
MDR位数 = 存储字长
存储体:
- 存储单元:每个存储单元存放一串二进制代码
- 存储字:存储单元中二进制代码的组和
- 存储字长:存储单元中二进制代码的位数
- 存储元:即存储二进制的电子原件,每个存储元可存
1bit
eg:MAR = 4位 -> 总共有2^4个存储单元
MDR = 16位 -> 每个存储单元可存放16bit,1个字
= 16bit
易混淆
:1个字节
= 8bit
1B = 1个字节 ,1b = 1个bit
B:运算器的基本组成
运算器:用于实现算术运算(加减乘除、逻辑运算)
ACC:累加器,用于存放操作数,或运算结果
C:控制器的基本组成
D:计算机的工作过程
二:计算机系统的层次结构:
虚拟机器 M4 (高级语言机器) y = a*b+c
⬇
虚拟机器 M3 (汇编语言机器) 用汇编程序翻译成机器语言程序
⬇
虚拟机器M2 (操作系统机器) 向上提供“广义指令”(系统调用)
⬇
传统机器M1 (机器语言指令) 执行二进制机器指令 010101011000
⬇
微程序机器 M0 (微指令系统) 由硬件直接执行微指令
> 下层是上层的基础,上层是下层的扩展
三种级别的语言:
汇编语言:助记符
高级语言:C/C++ / JAVA
机器语言:二进制代码
🔰 编辑程序:将高级语言编写的源程序全部语句一次全部翻译成及其语言程序
🔰 解释程序:将原程序的一条语句翻译成对应于机器语言的语句,并立即执行。紧接着在翻译下一句(每次执行都要翻译)
计算机体系结构 vs 计算机组成原理
计算机体系结构:
机器语言程序员所见到的计算机系统的属性概念性的结构与功能特性(指令系统、数据类型、寻址技术、I/O机理)
🔰 有无乘法指令
计算机组成原理:
实现计算机体系机构所体现的属性,对程序员“透明”(具体指令的实现)
🔰 如何实现乘法指令
透明 ---- 指的是看不见
三:计算机的性能指标
3.1 存储器的性能指标
总容量 = 存储单元个数 * 存储字长 (bit)
= 存储单元个数 * 存储字长 /8 (Byte)
Eg:MAR为32位,MDR为8位
则总容量 = 232 * 8 bit = 4GB
n个二进制位能表示出多少中不同的状态?
答:能够表示2 n 种状态
210 :K 220:M 230:G 240:T
3.2 CPU的性能指标
CPU主频:CPU内数字脉冲信号震荡的频率。
CPU主频 (时钟频率)=
CPI(clock cycle Per Instruction):执行一条指令所需的时钟周期数
⚡不同的指令,CPI不同。甚至相同的指令,CPI也有可能有变化。
Eg:某CPU主频为1000Hz,某程序包含100条指令,平均看指令的CPI = 3,该程序在该CPU上执行需要多久?
答: 100 * 3 * 1/1000 = 0.3s
CPU执行时间(整个程序的耗时) = CPU时钟周期数 / 主频 = (指令条数 * CPI)/ 主频
IPS:每秒执行多少条指令 = 主频 / 平均CPI
FLOPS:每秒执行多少次浮点运算
注:此处的K,M,G,T为数量单位
K=kilo = 千 = 103 ,M = Milion = 百万 = 106 G = Giga = 十亿 = 109 T = Tera = 万亿 = 1012
3.3 系统整体的性能指标
- 数据通路带宽:数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据)
- 吞吐量:指系统在单位时间内处理请求的数量。
- 响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要的结果的等待时间。
3.3.1 动态测试
基准程序:是用来测量计算机处理速度的一种使用程序;像鲁大师跑分软件。
❓ 问题:
- 主频高的CPU一定比主频低的CPU快吗?
不一定,如两个CPU,A的主频为2GHz,平均CPI = 10;B的主频1GHz,平均CPI = 1
- 若A,B两个CPU的平均CPI相同,那么A相同,那么A一定更快吗?
也不一定,还要看指令系统,如A不支持乘法指令,只能用多次加法实现乘法;而B支持乘法指令
- 基准程序执行的越快说明机器性能越好吗?
基准程序的语句存在频度差异,运行结果也不能完全说明问题。
第二章 数据的表示和运算
一、进位计数制
1 十进制:
2 推广:r进制计数法
基数:每个数码位所用到的不同符号的个数,r进制的基数为r
eg:八进制+八进制 = 逢8进1
✨3 任意进制 --> 十进制
3.1 二进制:1 0 0 1 0 0 1 0 . 1 1 0
👇
十进制:1*27 + 1 * 24 + 1 * 21 + 1 * 2-1 +1 * 2-2 = 146.75
注解:只需要找到各个1的位权(最低的位权为2),然后乘于对应的码位。
🔰 方法二:将各个的位权按照顺序写出来,然后相加
128 64 32 16 8 4 2 1
1 0 0 1 0 0 1 0
= 128 + 16 + 2 + 1 = 146
3.2 八进制:251.5
👇
十进制:2*82 + 5 * 81 + 1 * 80 + 5 * 8-1 = 168.625
3.3 十六进制:AE86.1
👇
十进制:10*163 + 14*162 + 8 * 161 + 6 * 160 + 1 * 16-1 = 44678.0625
✨4 二进制 --> 八进制、十六进制
4.1 二进制 ---> 八进制
3位一组,每组转换成对应的八进制符号,头部不够的用0补位
1 1 1 1 0 0 0 0 1 0 . 0 1 1 0 1
001 111 000 010
1 7 0 2
4.2 二进制 ---> 十六进制
4位一组,每组转换成对应的十六进制符号
4.3 八进制 ---> 二进制
每位八进制对应的三位二进制
4.4 十六进制 ---> 二进制
每位十六进制对应的四位二进制
5 各种进制的常见书写方式
6 十进制 ----> 任意进制
十转任意就是除以任意就行
7 十进制 ----> 二进制(拼凑法)
8 真值和机器数
真值:符合人类习惯的数字
机器数:数字实际存到机器里的形式,正负号需要被“数字化”
⚡ 总结:
二、BCD码
8421码的映射关系:
三、无符号整数的表示和运算
概念:无符号整数,即“自然数”,0,1,2,3,4 .......
C语言中的无符号整数:
❓❓❓why:
- 无符号整数,在计算机硬件内,如何表示?
- 无符号整数的加法、减法运算时怎么用硬件实现的?
3.1 无符号整数的表示
若机器字长8位,则通用寄存器只能存8位,并且ALU最多只能同时进行8位运算;
该计算机硬件能支持的无符号整数位数有上限。
无符号整数:
- 全部二进制位都是数值位,没有符号位,第i位的位权是 2i-1
- n bit 无符号整数表示范围 0~2n-1 ,超出则溢出,意味着该计算机无法一次处理这么多
- 可以表示的最小的数 全0 ,可以表示最大的数 全1(255)
3.2 无符号整数的加法运算
计算机硬件如何做无符号整数的加法:从最低位开始,按位相加,并往更高位进位
3.3 无符号整数的减法运算
计算机硬件如何做无符号整数的减法:
- “被减数”不变,“减数”全部按位取反、末位+1,减法变加法
- 从最低位开始,按位相加,并往更高位进位
知识回顾:
四、带符号整数的表示和运算( 原码/反码/补码)
4.1 带符号整数在计算机中的应用
带符号整数,即“整数”,-2、-1、0、1、2、3、4...
C语言中的带符号整数:
short a= 1; //带符号整数(短整型,2B)
int b = -2; //带符号整数(短整型,4B)
位数不同,可表示数值范围不同
❓❓❓why:
- 带符号整数,在计算机硬件内,如何表示?
- 带符号整数的加法、减法运算时怎么用硬件实现的?
4.2 原码表示
原码:
- 符号位“0/1”对应“正/负”,剩余的数值位表示真值
- 若机器字长n+1位,带符号整数的原码表示范围:-(2n-1) ≤ x ≤ 2n -1
这个只是说原码的范围大小是多少,并不是指取到2n位。
- 真值0有两种方式:+0和-0,[+0]原 = 0,0000000;,[-0]原 = 1,0000000
4.2 原码的缺点
原码的缺点:符号位不能参与运算,需要设计复杂的硬件电路才能处理,费钱!贵!
用补码表示真值 ---符号位可以参与运算
4.3 原码-> 反码 -> 补码的转换(计算)
最高位表示符号位;原码和反码可以相互转换
👉正数:
原码转化为反码时,反码与原码一致
👉负数:
- 原码转化为反码时,符号位不变,数值位取反;= 反码
- 反码转化为原码时,符号位不变,数值位取反;= 原码
- 反码转化为补码时,反码的末位+1;= 补码
4.3 原码->补码的快速转换技巧(手算)
正数:原码转化为补码时,补码和原码是同样的;
负数:
- 原码转化为补码时,从右往左找到第一个1,这个 1 左边的所有“数值位”按位取反
- 补码转化为原码时,从右往左找到第一个1,这个 1 左边的所有“数值位”按位取反
4.4 补码的加法运算
‼‼ 补码数值不能解读为“位权”
计算机硬件如何做补码的加法:从最低为开始,按位相加(符号位参与运算),并往更高为进位
4.5 补码的减法运算
计算机硬件如何做带符号整数的减法:
- “被减数”不变,“减数”全部按位取反、末位+1,减法变加法
- 从最低位开始,按位相加,并往更高位进位
4.5 知识回顾
五、原码/反码/补码的特性对比
5.1 各种码的基本特性总结
原码和反码的合法表示范围完全相同,都有两种方法表示真值0
补码的合法表示范围比原码多一个负数,只有一种方法表示真值0
常见考点:两个数A和B进行某种运算后,是否发生溢出? -- 手算做题可以带入十进制验证,是否超出合理范围,注意补码的范围要比与原码和反码的范围大;
六、移码
6.1 概念
补码的基础上将符号位取反。
注意:移码只能用于表示整数;真值0只有一种表示形式
若机器字长n+1位,移码整数的表示范围:-2n ≤ 2n-1(与补码相同)
6.2 各种码的基本特性总结
七、定点小数
7.1 定点小数
概念:
- 定点整数 --- 即:带符号的整数
定点整数的编码表示:原码、反码、补码、移码
- 定点小数 --- 即小数点固定的数
定点小数的编码表示:原码、反码、补码
7.1.1 定点小数的原码表示
eg:
符 2-1 2-2 2-3 2-4 2-5 2-6 2-7
+0.75D 0 1 1 0 0 0 0 0
-0.75D 1 1 1 0 0 0 0 0
常写为:[X]原 =1.11000000
7.1.2 定点小数的原码/反码/补码的转换
与带符号整数一模一样
7.1.3 定点小数的加/减运算
与带符号整数一模一样
7.1.4 定点小数 VS 定点整数
7.1.4.1 范围比较
7.1.4.2 位数扩展的拓展位置不同
定点小数是扩展在尾部
定点整数是扩展在符号位和数值位中间
八、奇偶校验码
8.1 校验原理简介
8.2 奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中的 "1" 个数为奇数
偶校验码:整个校验码(有效信息和校验位)中"1"的个数为偶数
eg:给出两个编码1001101和1010111的奇校验码和偶校验码
设最高位为校验码,余7位是信息位,则对应的奇偶校验码为:
奇校验:
1 1001101
因为信息位有4个1,则最高位补一个1让其变为奇校验
0 1010111
因为信息位有5个1,则最高位补一个0让其变为奇校验
偶校验:
0 1001101
因为信息位有4个1,则最高位补一个0让其变为偶校验
1 1010111
因为信息位有5个1,则最高位补一个1让其变为偶校验
👩🏫 奇偶校验的缺陷是无法辨别偶数个bit位的错误,只能校验奇数个的错误
九、算数逻辑单元
9.1 电路基本原理和加法器设计
9.1.1 算数逻辑的单元(ALU)
算数运算:加、减、乘、除等
逻辑运算:与、或、非、异或等
辅助功能:移位、求补等
- ALU的位数一般是和寄存器相同的
- 机器字长与算术逻辑单元(ALU)的位数之间有一定关系。ALU是计算机中负责执行算术和逻辑操作的部件,它操作的位数通常与机器字长相同或更小
- 例如,如果机器字长是32位,ALU也是32位,它可以直接执行32位整数的加法、减法、逻辑运算等操作
- 例如,如果机器字长是64位,但ALU只有32位,那么计算机需要通过多次ALU操作来完成对64位整数的运算
9.1.2最基本的逻辑运算
优先级:与 > 或
A(C+D) = AC+AD --分配律
ABC = A(BC) -- 结合律
A+B+C = A+(B+C) -- 结合律
本质上逻辑表达式是对电路的数学化描述,简化逻辑表达式,就是在简化电路,就是在省钱。