计算机组成原理
参考文献
- 王道计算机组成原理
冯诺依曼模型
- 输入设备;
- 输出设备;
- 内存;
- 中央处理器;
- 总线。
计算机的功能部件
- 输入设备
- 输出设备
- 存储器
- 主存储器: 内存储器,CPU能直接访问
- 辅助存储器: 外存储器,协助主存储器记忆更多的信息,辅助存储器的信息需要导入到主存储器中,才可以被CPU访问
- 运算器
- 是计算机的运算单元,用于算术运算和逻辑运算
- 运算器的核心单元是算术逻辑单元(ALU)
- 控制器
- 控制器是计算机的指挥中心,有其指挥各部件自动协调第进行工作,现代计算机将运算器和控制器集成到一个芯片上,合成为中央处理器,简称CPU。有程序计数器(PC)、指令寄存器(IR)和控制单元(CU)
主板
- 主板的芯片组(Chipset)和总线(Bus)解决了CPU和内存之间如何通信的问题。芯片组控制了数据传输的流转,也就是数据从哪里到哪里的问题。
- 总线则是实际数据传输的高速公路。因此,总线速度(Bus Speed)决定了数据能传输得多快。
- 作为外部I/O设备,它们是通过主板上的南桥(SouthBridge)芯片组,来控制和CPU之间的通信的。
主机
- 主机: 主存,运算器,控制器
- 工作流程:
- 指令,数据存入主存,PC指向第一条指令
- 从主存中读取指令放入IR中,PC自动加一,CU分析指令,CU指挥其他部件执行指令
主存
- 存储体: 存储元,存储单元,存储字,存储字长,地址
MAR(Memory Address Register)
: 地址寄存器,用于指明要读/写哪个存储单元.其位数反映存储单元数量- 存放欲访问的存储单元地址
MAR
=4位: 总共有$2^{4} $个存储单元
MDR(Memory Data Register)
: 数据寄存器,用于存储要读/写的数据.其位数==存储字长.- 存放从存储单元取来的数据
MDR
=16位: 每个存储单元可存放16bit,一个字(word)=16bit- 一个字节(Byte)=8bit;
- 1B=一个字节(Byte);
- 1b=一个bit
运算器
ACC
: 累加计数器,存放操作数,运算的结果MQ
: 乘商寄存器,进行乘,除法时用到X
: 通用寄存器,存储操作数ALU
: 算数逻辑单元,用电路实现各种算数运算,逻辑运算
控制器
PC(Program Counter)
: 程序计数器- 存放下一条指令的地址
IR(Instruction Register)
: 指令寄存器- 存放当下欲执行的指令
CU(Control Unit)
: 控制单元,分析指令,给出控制信号
计算机性能指标
- 存储器容量
- MAR的位数反映存储单元数量
- MDR反映每个存储单元大小
- CPU
- 时钟周期: CPU中最小的时间单位,每个动作至少要一个时钟周期
- 主频(时钟频率): =1/时钟周期,单位:
Hz
- CPI: 执行一条指令所需的时钟周期数
- CPU执行时间
- 运行一个程序所花费的时间
- =(指令条数*CPI)/主频
- IPS: 每秒执行多少条指令=主频/平均CPI
- MIPS(Million Instructions Per Second)=即每秒执行多少百万条指令。
- FLOPS: 每秒执行多少次浮点运算
- MFLOPS(Mega Floating-point Operations Per Second)=浮点操作次数/(执行时间x),即每秒执行多少百万次浮点运算。
- GFLOPS(Giga Floating-point Operations Per Second)=浮点操作次数/(执行时间x),即每秒执行多少十亿次浮点运算。
- TFLOPS(Tera Floating-point Operations Per Second)=浮点操作次数/(执行时间x),即每秒执行多少万亿次浮点运算。
- 常用数量单位
- 描述存储容量,文件大小时:K=,M=,G=,T=
- 描述频率,速度时:K=,M=,G=,T=
数据的表示与运算
进位计数制及其相互转化
-
r进制数: 基数=r,每个数码位可能出现r种字符.逢r进1
-
r进制数–>十进制: r进制数的数值=各数码位与位权的乘积之和
-
二进制<–>八进制: 每3个二进制位对应一个八进制位
1
2二进制: 001 111 000 010 . 011 010
八进制: 1 7 0 2 3 2 -
二进制<–>十六进制: 每4个二进制位对应一个十六进制位
1
2二进制: 0011 1100 0010 . 0110 1000
十六进制: 3 C 2 . 6 8 -
十进制–>r进制
- 整数部分: 除基取余法,先取得的"余"是整数的低位.倒序取余
- 小数部分: 乘积取整法,先取得的"整"是小数的高位,正序取整
机器数和真值
- 机器数: 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
- 真值: 因为第一位是符号位,所以机器数的形式值就不等于真正的数值.所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
原码,反码,补码基础概念和计算方法
-
原码: 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
- 原码是人脑最容易理解和计算的表示方式.
1
2
3
4
5
6
7
8
9
10
11比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即[-127 , 127] -
反码的表示方法是:
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
1
2
3[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反 -
补码的表示方法是:
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
1
2
3[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
在高级语言编程中所定义的unsigned/short/int/long/float/double
型数据是怎么表示的?什么称为无符号整数的“溢出”?
- unsigned型数据就是无符号整数,不考虑符号位。直接用全部二进制位对数值进行编码得到的就是无符号数,一般都用补码表示。
- int型数据就是定点整数,一般用补码表示。int型数据的位数与运行平台和编译器有关,一般是32位或16位。例如,真值是-12的int型整数,在机器内存储的机器数(假定用32位寄存器寄存)是1111-1111-1111-1111-1111-1111-1111-0100.
- long型数据和short型数据也都是定点整数,只是位数不同,分别是长整型和短整型数,通常用补码表示。
- float型数据是用来表示实数的浮点数。现代计算机用IEEE754标准表示浮点数,其中32位单精度浮点数就是float型,64位双精度浮点数就是 double型。
- 需要注意的是,C语言中的int型和 unsigned型变量的存储方式没有区别,都按照补码的形式存储,在不溢出范围内的加减法运算也是相同的,只是int型变量的最高位代表符号位,而unsigned型中的最高位表示数值位,两者在C语言中的区别体现在输出时到底是采用%d还是采用%u。
- 对于无符号定点整数来说,若寄存器位数不够,则计算机运算过程中一般保留低n位,舍弃高位。这样,会产生以下两种结果。
- 保留的低n位数不能正确表示运算结果。在这种情况下,意味着运算的结果超出了计算机所能表达的范围,有效数值进到了第n+1位,称此时发生了“溢出”现象
- 保留的低n位数能正确表达计算结果,即高位的舍去并不影响其运算结果。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!