沧海一桑田,蓦然半回首
1. 背景
1.1 发展
- 第一代(1946-1957) 电子管时代
- 第二代(1958-1964) 晶体管时代
- 第三代(1965-1971) 中小规模集成电路时代
- 第四代(1972-至今) 超大规模集成电路时代
1.2 元件
- 摩尔定律
- 半导体存储器的发展
- 微处理器的发展
1.3 分类与方向
1.3.1 按照用途
- 电子模拟计算机
- 电子数字计算机
- 专用计算机
- 通用计算机
- 巨型机
- 大型机
- 中型机
- 小型机
- 微型机
- 单片机
1.3.2 按照指令和数据流
- 单指令流和单数据流(SISD):冯诺依曼结构
- 单指令流和多数据流(SIMD):包括阵列处理器和向量处理器系统
- 多指令流和单数据流(MISD):这种计算机实际上不存在
- 多指令流和多数据流(MIMD):包括多处理器和多计算机系统
1.3.3 方向
- 微型计算机,微型化、网络化、高性能、多用途方向发展
- 巨型计算机:巨型化、超高速、并行处理、智能化发展
1.4 计算机组成
1.4.1 冯诺依曼机
- 计算机硬件由运算器、控制器、存储器、输入设备、输出设备
- 指令和数据以同等地位存储在存储器中,并可以按照地址寻访
- 指令和数据均用二进制代码表示
- 指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址
- 指令在存储器中按顺序存放,通常指令顺序执行,特定情况下根据运算结果和根据设定的条件改变执行顺序
- 早期的冯诺依曼以运算器为中心,,输入输出通过运算器与存储器传送数据,现代以存储器为中心,尽可能绕开CPU
1.4.2 功能部件
- 输入设备
- 输出设备
- 存储器
主存储器【主存,内存储器】,辅助存储器【辅存,外存储器】,地址寄存器【MAR】和高速缓存【Cache】现代是存在CPU中
数据寄存器【MDR】,时序控制逻辑
- 运算器
算术运算和逻辑运算,核心是算术逻辑单元【ALU】,若干寄存器:累加器【ACC】、乘商寄存器【MQ】、操作数寄存器【X】、变址寄存器【IX】、基址寄存器【BR】、程序状态寄存器【PSW】,前面3个寄存器是必须的
- 控制器
由程序计数器【PC】、指令寄存器【IR】和控制单元【CU】组成
1.4.3 计算机软件分类
- 系统软件
操作系统【OS】、数据库管理系统【DBMS】、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序
- 应用软件
科学计算类、工程设计类
1.4.4 计算机语言
- 机器语言
- 汇编语言
- 高级语言
1.4.5 计算机工作过程
- 把程序和数据装入主存储器
- 将源程序转换成可执行文件
一般是预处理阶段,编译阶段,汇编阶段,链接阶段
- 从可执行文件的首地址开始逐条执行指令
取指令:PC-MAR-M-MDR-IR
分析指令:OP(IR)-CU
执行指令:Ad(IR)-MAR-M-MDR-ACC
pc+1-pc
1.4.6 多级层次结构
硬件层
微程序机器层
传统机器语言层
操作系统层
汇编语言层
高级语言层
1.5 主要性能指标
- 机器字长
- 数据通路带宽
- 主存容量
- 运算速度
吞吐量
响应时间
- 主频和Cpu时钟周期
- 基准程序
1.6 专业术语
- 系列机
- 兼容
- 软件可移植性
- 固件
2. 数据的表示和运算
2.1 进位计数制及其相互转换
- 二进制(2^1)
- 三进制(3^1)
- 四进制(2^2)
- 八进制(2^3)
- 九进制(3^2)
- 十进制
- 十六进制(2^4,ABCDEF)
1111000010.01101 二进制 转换为八进制和十六进制,八进制取3位,十六进制取4位
(1702.32)8 = (1111000010.01101)2
(3C2.68)16 = (1111000010.01101)2
不是每个十进制小数都可以准确的用二进制表示,但所有的二进制都可以用十进制表示
2.2 真值和机器数
+15真值这种是机器数0101所代表的实际值
2.3 BCD码
通常采用四位二进制数来表示一位十进制的一个数
- 8421
有权码
- 余3码
- 2421码
2.4 字符与字符串
- 字符编码Ascall码
- GB18030
2.5 校验码
- 奇偶校验码
- 海明校验码
- 循环冗余校验码【CRC】
2.6 定点数的表示与运算
2.6.1 定点数的表示
- 定点小数
- 定点整数
2.6.2 原码、补码、反码、移码
小数点求二进制,乘以2 >1取1不大于1取0
原码表示法
- 纯小数的原码:[x]原 = {x 1>x>=0},{1-x = 1+ |x| 0>=x>-1}
- 纯整数的原码:[x]原 = {0,x 2^n > x >=0},{2^n-x = 2^n + |x| 0 >= x >-2^n}
真值0的原码有正0和负0的区别 即[+0]原 = 00000 [-0]原 = 10000
补码表示法【可以将原码加减法统一采用加法操作实现,取反加1】
- 纯小数的补码定义:[x]补 = {x 1>x>=0},{2+x = 2-|x| 0>x>=-1}
- 纯整数的补码定义: [x]补 = {0,x 2^n >x>=0},{2^(n+1) + x = 2^(n+1) - |x| 0 >=x>=-2^n}
反码表示法【通常用来作为原码求补码,或补码求原码的中间过渡】
纯小数的反码定义:[x]反 = {x 1>x>=0},{(2-2^-n) + x 0>=x>-1}
纯整数的反码定义:[x]反 = {0,x 2^n > x >=0},{(2^(n+1)) + x 0 >= x >-2^n}
真值0的反码表示不唯一,例如[+0]反 = 0.0000;[-0]反 = 1.1111;
移码表示法
移码常用来表示浮点数的阶码,它只能表示整数
2.6.3 定点数的运算
- 定点数的移位运算
- 算术移位
对于正数,由于[x]原 = [x]补 = [x]反 = 真值,添补0
序号 | 数值 | 码制 | 添补代码 |
---|---|---|---|
1 | 正数 | 原码、补码、反码 | 0 |
2 | 负数 | 原码 | 0 |
3 | 负数 | 补码左移 | 0 |
4 | 负数 | 补码右移 | 1 |
5 | 负数 | 反码 | 1 |
- 逻辑移位
逻辑移位不管左移还是右移添加的都是0,逻辑移位将操作数视为无符号数,移位规则:逻辑左移时,高位移丢,低位添0;逻辑右移时,低位移丢,高位添0
- 循环移位
分为带进位标志位CF的循环移位(大循环)和不带进位标志位的循环移位(小循环),特别适合将数据的低字节数据和高字节数据互换
原码定点数的加减法运算
加法规则:先判符号位,若相同,则绝对值相加,结果符号位不变,若不同,则做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同
减法规则:两个原码表示的数相减,首先将减数符号取反,然后将被减数与符号取反后的减数按原码加法进行运算
运算时注意机器字长,当左边位出现溢出时,将溢出位丢掉
补码定点数加减法运算
- 加法:两数的补码直接相加
- 减法:将被减数与减数的机器负数相加
补码运算的结果亦为补码
- 符号扩展
8位数和32位数相加,必须将8位数转换为32位数
- 溢出概念和判断方法
溢出是指运算结果超出了数的表示范围,仅当两个符号相同的数相加或两个符号相异的数相减才可能产生溢出
补码定点数加减法溢出判断的方法
- 采用一位符号位
- 采用双符号位
- 采用一号符号位根据数据位的进位情况判断溢出
定点数的乘法运算
乘法运算由累加和右移操作实现,根据机器数的不同,可分为原码一位乘法,和补码一位乘法
- 原码一位乘法
符号位和数值位分开,乘积符号由两个数的符号位“异或”形成,而乘积的数值部分则是两个数的绝对值相乘之积,因此原码一位乘法运算过程中的右移操作均为逻辑右移,考虑运算时出现绝对值大于1却没有溢出,所以部分积和被乘数取双符号位
- 补码一位乘法(Booth算法)
这是一种有符号数的乘法,采用相加和相减操作计算补码数据的乘积
- 表1 Booth算法的移位规则
序号 | yn(高位) | y(n+1)(低位) | 操作 |
---|---|---|---|
1 | 0 | 0 | 部分积右移一位 |
2 | 0 | 1 | 部分积加[x]补,右移一位 |
3 | 1 | 0 | 部分积加[-x]补,右移一位 |
4 | 1 | 1 | 部分积右移一位 |
- 表2 乘法运算总结
序号 | 乘法类型 | 符号位参与运算 | 符号位部分积 | 符号位乘数 | 累加次数 | 移位方向 | 移位次数 | 移位每位次数 |
---|---|---|---|---|---|---|---|---|
1 | 原码一位乘法 | 否 | 2位 | 0位 | n | 右 | n | 1 |
2 | 补码一位乘法 | 是 | 2位 | 1位 | n+1 | 右 | n | 1 |
- 定点数的除法运算
除法运算可以转换为累加-逻辑左移,根据机器数的不同,可分为原码除法和补码除法
- 原码除法运算(不恢复余数法)【原码加减交替除法】
商符和商值是分开的,商符由两个操作数的符号位“异或”形成
- 补码除法运算【加减交替法】
补码一位除法的特点是符号位与数值位一起运算,商符自然形成
- 表3 除法运算总结
序号 | 除法类型 | 符号位参与运算 | 加减次数 | 移位方向 | 移位次数 | 说明 |
---|---|---|---|---|---|---|
1 | 原码加减交替法 | 否 | N+1或N+2 | 左 | N | 若最终余数为负,需恢复余数 |
2 | 补码加减交替法 | 是 | N+1 | 左 | N | 商末位横置1 |
2.7 数据的存储和排列
- 数据的大端方式和小端方式存储
通常以最低有效字节(LSB)和最高有效字节(MSB)来分别表示数的低位和高位,存储数据时,从低位到高位可以从左到右排列,也可以从右到左排列
- 数据按照边界对齐方式存储
空间换时间的思想,RISC和ARM采用边界对齐方式,而CISC和X86对齐和不对齐都支持
3. 浮点数的表示和运算
3.1 浮点数的表示
- 浮点数的表现格式
N = r^E * M ,其中r一般等于2
- 规格化浮点数
所谓规格化,是指通过调整一个非规格化浮点数的尾数和阶码的大小,使非0的浮点数在尾数的最高数位保证是一个有效值
- 左规
- 右规
3.2 浮点数的表示范围
负上溢|负数区|负下溢|正下溢|正数区|正上溢
上溢时,计算机必须中断运算操作,进行溢出处理,下溢时,浮点数值趋向于0,计算机仅将其当作机器0处理
3.3 IEEE 754标准
- 表4 IEEE 754 浮点数的格式
序号 | 类型 | 数符 | 阶码 | 尾数数值 | 总位数 | 偏置值十六进制 | 编置值十进制 |
---|---|---|---|---|---|---|---|
1 | 短浮点数 | 1 | 8 | 23 | 32 | 7FH | 127 |
2 | 长浮点数 | 1 | 11 | 52 | 64 | 3FFH | 1023 |
3 | 临时浮点数 | 1 | 15 | 64 | 80 | 3FFFH | 16383 |
短浮点数与长浮点数都采用隐含尾数最高数位的方法,因此可多表示一位尾数,临时浮点数又称扩展精度浮点数,无隐含位
3.4 定点、浮点表示的区别
- 数值的表示范围
字节相同时,浮点表示法所能表示的数值范围远远大于定值表示法
- 精度
指一个数所含有效数值位的位数,字节相同时,浮点数精度降低
- 数的运算
浮点数在运算时要做尾数和阶码的运算,运算结果要求规格化
- 溢出问题
定点运算,运算结果超出数的表示范围,发生溢出,浮点运算中,规格化后阶码超出所能表示的范围,发生溢出
3.5 浮点数的加减运算
浮点数的加减运算一律采用补码
- 对阶
使两个操作数的小数点位置对齐,使得两个数的阶码相等,小阶向大阶看齐
- 尾数求和
将对阶后的尾数按定点数加减法运算规则运算
- 规格化
左规,右规,左规一次相当于*2,右规一次相当于/2
舍入
- 0舍1入法
- 横置1法
溢出判断
浮点数的溢出是由阶码的符号决定的
- C语言的浮点数类型和类型转换
char-int-long-double
4. 算术逻辑单元【Arithmetic Logic Unit ,ALU】
运算器由算术逻辑单元、累加器、状态寄存器、通用寄存器等组成,ALU的功能包括+-*/&&||!|以及移位、求补
4.1 串行加法器和并行加法器
ALU核心是加法器,加法器是由全加器配以其他必要的逻辑电路组成
- 一位全加器
有加数Ai、加数Bi与低位传进来的进位Ci-1共三个输入,有本位Si与向高位进位Ci共两个输出
- 串行加法器
只有一个全加器【FA】,数据逐位串行送入加法器中进行运算,器件少、成本低,运算速度慢;
- 并行加法器
多个全加器组成,其位数与机器的字长相同,各位数据同时运算,有串行进位和并行进位两种进位
- 串行进位
把n个全加器串接起来,就可以进行两个n位数相加
- 并行进位【先行进位、同时进位】
各级进位信号同时形成
- 单机先行进位方式【组内并行、组间串行进位方式】
- 多级先行进位方式【组内并行、组间并行进位方式】
4.2 算术逻辑单元的功能和结构
- 带标志加法器
无符号数加法器只能用于两个无符号数相加,不能进行带符号整数的加、减法运算,为了加快加法运算的速度,实际电路一定使用多级先行进位方式
- 算术逻辑单元
- 补码加减法运算部件
5. 存储系统
5.1 存储器的分类
按照计算机的作用分
- 主存储器
- 辅助存储器
- 高速缓冲存储器
按照存储介质分
- 磁表面存储器(磁盘、磁带)
- 磁心存储器
- 半导体存储器(MOS型存储器、双极型存储器)
- 光存储器(光盘)
按照存储方式分类
- 随机存储器(RAM)
- 只读存储器(ROM)
- 串行访问存储器
按照信息可保存性分类
- 易失性存储器
- 非易失性存储器
- 破坏性读出
- 非破坏性读出
5.2 存储器的性能指标
- 存储容量
存储容量 = 存储字数 * 字长
- 单位成本
每位价格 = 总成本/总容量
存储速度
数据传输率 = 数据的宽度/存储周期
- 存取时间
- 存储周期
- 主存带宽
5.3 多级存储系统
CPU寄存器 |
---|
Cache |
主存 |
磁盘 |
磁带 光盘 |
5.4 半导体随机存储器
5.4.1 静态随机存储器【SRAM】
SRAM的存储元是用双稳态触发器(六晶体管MOS)来记忆,非破坏性读出,存储速度快,集成度低,功耗大,一般用来组成高速缓冲存储器
5.4.2 动态随机存储器【DRAM】
DRAM是利用存储元电路中栅极电容上的电荷来存储信息,只使用一个晶体管
- 刷新方式
- 集中刷新
- 分散刷新
- 异步刷新
5.4.3 存储器芯片的内部结构
存储体,I/O读写电路、地址译码和控制电路、片选控制信号、读写控制信号等部分组成
- 表5 SRAM与DRAM各自特点
序号 | 特点 | SRAM | DRAM |
---|---|---|---|
1 | 存储信息 | 触发器 | 电容 |
2 | 破坏性读出 | 非 | 是 |
3 | 需要刷新 | 否 | 是 |
4 | 送行列地址 | 同时送 | 分两次送 |
5 | 运行速度 | 快 | 慢 |
6 | 集成度 | 低 | 高 |
7 | 发热量(功耗) | 大 | 小 |
8 | 存储成本 | 高 | 低 |
9 | 主要用途 | 高速缓存 | 主机内存 |
5.5 只读存储器
5.5.1 分类
- 掩模式只读存储器
生产过程直接写入
- 一次可编程只读存储器
一旦写入,无法改变
- 可擦除可编程只读存储器
- 闪速存储器
- 固态硬盘
5.6 主存储器
5.6.1 基本组成
主存储器由一个个存储0或1的记忆单元(也称存储元件)构成的存储矩阵(也称存储体)是存储器的核心部分
5.6.2 主存储器与CPU链接
- 主存储器通过数据总线、地址总线和控制总线与CPU连接
- 数据总线的位数与工作频率的乘积正比于数据传输率
- 地址总线的位数决定了可寻址的最大内存空间
- 控制总线(读/写)指出总线周期的类型和本次输入/输出操作完成的时刻
5.6.3 主存容量的扩展
- 位扩展法
- 字扩展法
- 字位同时扩展法
5.6.4 存储芯片的地址分配和片选
- 线选法
- 译码片选法
5.6.5 存储器与CPU的连接
- 合理选择存储芯片
- 地址线的连接
- 数据线的连接
- 读/写命令线的连接
- 片选线的连接
5.7 双端口RAM和多模块存储器
5.7.1 双端口RAM
空间并行技术
5.7.2 多模块存储器
时间并行
- 单体多字存储器
- 多体并行存储器
5.8 高速缓冲存储器
通常将存储系统分为“Cache - 主存”层次和“主存-辅存”层次,高速缓冲技术就是利用程序访问的局部性原理
- Cache 的基本工作原理
Cache位于存储器层次结构的顶层,通常由SRAM构成,当CPU发出请求时,若Cache命中,将此地址转换为Cache地址,直接对Cache进行读操作,不命中,仍需要访问主存,并把此字所在的块一次性从主存调入Cache。
Cache与主存的映射方式
- 直接映射
- 全相联映射
- 组相联映射
Cache中主存块的替换算法
- 随机算法
- 先进先出算法
- 近期最少使用算法
Cache写策略
- 全写法【FIFO】
- 写回法
- 写分配法
- 非写分配法
5.9 虚拟存储器
虚拟存储器将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间,用户可以自由编程,而不必在乎实际的主存容量和程序在主存中实际的存放位置
- 页式虚拟存储器
以页为基本单位的虚拟存储器,主存的页为实页,虚存的页为虚页
页表
快表(TLB)
具有TLB和Cache的多级存储系统
表6 TLB、Page、Cache三种缺失的可能情况
序号 | TLB | Page | Cache | 说明 |
---|---|---|---|---|
1 | 命中 | 命中 | 命中 | TLB命中则Page一定命中,信息在主存,就可能在Cache中 |
2 | 命中 | 命中 | 缺失 | TLB命中则Page一定命中,信息在主存,也可能不在Cache中 |
3 | 缺失 | 命中 | 命中 | TLB缺失但Page可能命中,信息在主存,就可能在Cache中 |
4 | 缺失 | 命中 | 缺失 | TLB缺失但Page可能命中,信息在主存,也可能不在Cache中 |
5 | 缺失 | 缺失 | 缺失 | TLB缺失则Page也可能命中,信息不在主存,就一定不在Cache中 |
- 段式虚拟存储器
- 段页式虚拟存储器
虚地址分为段号,段内页号,页内地址三部分
虚拟存储器与Cache的比较
相同
- 最终目的都是为了提高系统的性能,两者都有容量、速度、价格的梯度
- 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大
- 都有地址的映射、替换算法、更新策略等问题
- 依据程序的局部性原理应用“快速缓存的思想”,将活跃的数据放在相对高速的部件中
不同
- Cache主要解决系统速度,而虚拟存储器却是为了解决主存容量
- Cache全由硬件实现,是硬件存储器,对所有程序员透明,而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
- 对于不命中性能影响,因为CPU的速度约为Cache的10倍,主存的速度为硬盘的100倍以上,因此虚拟存储器系统不命中时对系统性能影响更大
- CPU与Cache和主存都建立了直接访问的通路,而辅存与CPU没有直接通路,也就是说在Cache不命中时主存能和CPU直接通信,同时将数据调入Cache,而虚拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和CPU通信
6. 指令系统
指令就是机器语言的一组有意义的二进制代码,能够使计算机执行某种操作;
6.1 指令的属性
- 指令
操作指令格式 | 操作码字段 | 地址码字段 | 地址码地址 | 地址码地址 | 地址码地址 | 说明 |
---|---|---|---|---|---|---|
零地址指令 | OP | 不需要操作数的指令,仅用在堆栈计算机中 | ||||
一地址指令 | OP | A1 | OP(A1)->A1加1、减1、求反、求补 | |||
二地址指令 | OP | A1 | A2 | (A1)OP(A2)->A1算术和逻辑运算指令 | ||
三地址指令 | OP | A1 | A2 | A3(结果) | (A1)OP(A2)->A3 | |
四地址指令 | OP | A1 | A2 | A3(结果) | A4(下址) | (A1)OP(A2)->A3,A4=下一条将要执行指令的地址 |
- 扩展操作码指令格式
<1> 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同
<2> 各指令的操作码一定不能重复
- 指令的操作系统
- 数据传送
- 算术和逻辑运算
- 移位操作
- 转移操作
- 输入输出操作
6.2 指令的寻址方式
有效地址(EA) = 形式地址(A) + 寻址方式
指令寻址
寻找下一条将要执行的指令地址称为指令寻址
- 顺序寻址方式
- 跳跃寻址方式
数据寻址
寻找操作数的地址称为数据寻址
- 隐含寻址
- 立即(数)寻址
- 直接寻址
- 间接寻址
- 寄存器寻址
- 寄存器间接寻址
- 相对寻址
- 基址寻址
- 变址寻址
- 堆栈寻址
表7 寻址方式、有效地址及访存次数
序号 | 寻址方式 | 有效地址 | 访存次数 |
---|---|---|---|
1 | 隐含寻址 | 程序指定 | 0 |
2 | 立即(数)寻址 | A即是操作数 | 0 |
3 | 直接寻址 | EA = A | 1 |
4 | 一次间接寻址 | EA = (A) | 2 |
5 | 寄存器寻址 | EA = Ri | 0 |
6 | 寄存器间接一次寻址 | EA = (Ri) | 1 |
7 | 相对寻址 | EA = (PC) + A | 1 |
8 | 基址寻址 | EA = (BR) + A | 1 |
9 | 变址寻址 | EA = (IX) + A | 1 |
10 | 堆栈寻址 | 入栈出栈EA确定方式不同 | 硬堆栈不访存、软堆栈访存1次 |
6.3 X86汇编指令
X86处理器中有8个32位的通用寄存器
- 寻址模式
1 | mov eax, [ebx]; |
最多只能利用两个32位寄存器和一个32位的有符号常数相加计算出一个内存地址
1 | mov eax, [ebx-ecx];错误,只能够用加法 |
- 数据长度规定
1 | mov [ebx], 2;//不能够识别 |
可以写成
1 | mov byte ptr [ebx], 2;单字节 |
- 常用指令
表示任意寄存器,其后带有数字,则指定其位数; 表示内存地址; 表示常数
1 | mov ax <con16>;机器码为B8H |
数据传送指令
mov指令
将第二个操作数复制到第一个操作数(寄存器或内存),但不能从内存
复制到 中
1 | mov <reg>, <reg> |
- 栗子
1 | mov eax, ebx; |
- push指令
push指令将操作数压入内存的栈,常用于函数调用
1 | push <reg32> |
- 栗子
1 | push eax; |
- pop指令
pop出栈
1 | pop edi |
算术与逻辑运算指令
add/sub指令
将两个操作数相加或者相减,结果保存到第一个操作数中
1 | add <reg>, <reg> / sub <reg>, <reg> |
- 栗子
1 | sub eax, 10;eax<- eax - 10 |
- inc/dec指令
inc、dec指令分别表示将操作数自加1、自减1
1 | inc <reg> / dec <reg> |
- 栗子
1 | dec eax;eax自减1 |
- imul指令
带符号整数乘法指令,第一个操作数必须为寄存器,将第一个和第二个或者第二个和第三个操作数相乘,结果保存在第一个操作数中
1 | imul <reg32>, <reg32> |
- 栗子
1 | imul eax, [var];eax<-eax*[var] |
- idiv指令
idiv是带符号整数除法指令,它只有一个操作数,即除数,而被除数则为edx:eax中的内容,商送到eax,余数送到edx
1 | idiv <reg32> |
- 栗子
1 | idiv ebx; |
- and/or/xor指令
逻辑与、或、异或,操作数的位操作
1 | and <reg>, <reg> / or <reg>, <reg> / xor <reg>, <reg> |
- 栗子
1 | and eax, 0fH ;将eax的强28位全部置为0,最后四位保持不变 |
- not指令
not指令是位翻转指令,将操作中的每一个数进行翻转,0->1,1->0
1 | not <reg> |
- 栗子
1 | not byte ptr [var]; |
- neg指令
neg是取负指令
1 | neg <reg> |
- 栗子
1 | neg eax;eax <- -eax |
- shl/shr指令
逻辑移位指令,shl逻辑左移,shr逻辑右移;第一个操作数表示被操作数,第二个表示指示移位的位数
1 | shl <reg>, <con8> / shr <reg>, <con8> |
- 栗子
1 | shl eax, 1;eax的值左移一位 *2 |
- 控制流指令
X86处理器维持着一个指示当前执行指令的指令指针(IP),此指针自动指向下一条指令
1 | mov esi, [ebp + 8] |
- jmp指令
jmp指令控制IP转移到lable所指示的地址
1 | jmp <lable> |
- 栗子
1 | jmp begin |
- jcondition指令
条件转移指令,它依据处理机状态字中的一系列状态转移
1 | je <lable> (jump when equal) |
- 栗子
1 | cmp eax, ebx |
- cmp指令
cmp用来比较两个操作数的值,并根据比较结果设置处理机状态字中的条件码
1 | cmp <reg>, <reg> |
- 栗子
1 | cmp dword ptr [var], 10 |
- call/ret指令
分别实现子程序(过程、函数)的调用和返回
1 | call <lable> |
6.4 复杂指令系统计算机( CISC)和精简指令系统计算机(RISC)
- 表8 CISC和RISC的对比
序号 | 对比项目 | CISC | RISC |
---|---|---|---|
1 | 指令系统 | 复杂,庞大 | 简单、精简 |
2 | 指令数目 | 一般大于200条 | 一般小于100条 |
3 | 指令字长 | 不固定 | 定长 |
4 | 可访存指令 | 不加限制 | 只有Load/Store指令 |
5 | 各种指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
6 | 各种指令使用频度 | 相差很大 | 都比较常用 |
7 | 通用寄存器数量 | 较少 | 多 |
8 | 目标代码 | 难以用优化编译生成高效的目标代码程序 | 采用优化的编译程序,生成代码较为高效 |
9 | 控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
10 | 指令流水线 | 可以通过一定方式实现 | 必须实现 |
7. 中央处理器
7.1 功能和基础结构
CPU的功能
- 指令控制
- 操作控制
- 时间控制
- 数据加工
- 中断处理
CPU的基本机构
运算器
- 算术逻辑单元(ALU)
- 暂存寄存器
- 累加寄存器
- 通用寄存器组
- 程序状态字寄存器
- 移位器
- 计数器
控制器
控制器有硬布线控制器和微程序控制器
- 程序计数器
- 指令寄存器
- 指令译码器
- 存储器地址寄存器
- 存储器数据寄存器
- 时序系统
- 微操作信号发生器
7.2 指令执行过程
CPU从主存中取出并执行一条指令的时间称为指令周期
指令周期的数据流
- 取指周期
<1> PC MAR 地址总线 主存
<2> CU发出控制信号 控制总线 主存
<3> 主存 数据总线 MDR IR(存放指令)
<4>CU发出读命令PC内容+1
- 间址周期
<1> Ad(IR或MDR)、MAR、地址总线、主存
<2> CU发出读命令、控制总线、主存
<3> 主存、数据总线、MDR(存放有效地址)
- 执行周期
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果,没有统一的数据流向
- 中断周期
中断周期的任务是处理中断请求
<1> CU控制将SP-1,SP、MAR、地址总线、主存
<2> CU发出写命令、控制总线、主存
<3> PC、MDR、数据总线、主存(程序断点存入主存)
<4> CU(中断服务程序的入口地址)、PC
7.3 指令执行方案
- 单指令周期
- 多指令周期
- 流水线方案
7.4 数据通路的功能和基本结构
数据通路是数据在功能部件之间传送的路径
基本结构
- CPU内部单总线方式
- CPU内部三总线方式
- 专用数据通路方式
数据流向
- 寄存器之间的数据传送
PC ->BUS
BUS->MAR
- 主存与CPU之间的数据传送
PC->BUS->MAR
1->R
MEM(MAR)->MDR
MDR->Bus->IR
- 执行算术或逻辑运算
Ad(IR)->BUS->MAR
1->R
MEM->数据线->MDR
MDR->BUS->Y
(ACC)+(Y)->Z
Z->ACC
7.5 控制器的功能和工作原理
7.5.1 硬布线控制器
- CU输入信号来源
<1> 经指令译码器译码产生的指令信息
<2>时序系统产生的机器周期信号和节拍信号
<3> 来自执行单元的反馈信息即标志
时序系统及微操作
- 时钟周期
- 机器周期
- 指令周期
- 微操作命令分析
- 取指周期的微操作命令
- 间址周期的微操作命令
- 执行周期的微操作命令
CPU的控制方式
- 同步控制方式
- 异步控制方式
- 联合控制方式
硬布线控制单元设计步骤
- 列出微操作命令的操作时间表
- 进行微操作信号综合
- 画出微操作命令的逻辑图
7.5.2 微程序控制器
基本概念
- 微命令与微操作
- 微指令与微周期
- 主存储器与控制存储器
- 程序与微程序
寄存器的区别
- 地址寄存器【MAR】
用于存放主存的读、写地址
- 微地址寄存器【CMAR】
用于存放控制存储器的读写微指令的地址
- 指令寄存器【IR】
用于存放从主存中读出的指令
- 微指令寄存器【CMDR】
用于存放从控制存储器中读出的微指令
微程序控制器的组成和工作过程
- 控制存储器
- 微指令寄存器
- 微地址形成部件
- 微地址寄存器
微程序控制器的工作过程
- 执行取微指令公共操作
- 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序的入口地址,并送入CMAR
- 从CM中逐条取出对应的微指令并执行
- 执行完对应于第一条机器指令的一个微程序后,又回到取指微程序的入口地址,重复第一步,以完成取下一条机器指令的操作
微指令的编码方式
- 直接编码(直接控制)方式
- 字段直接编码方式
微指令的地址形成方式
- 直接由微指令的下地址字段指出
- 根据机器指令的操作码形成
微指令的格式
- 水平型微指令
- 垂直型微指令
- 混合型微指令
微程序控制单元的设计步骤
- 写出对应机器指令的微操作命令及节拍安排
- 确定微指令格式
- 编写微指令码点
表 9 微程序控制器和硬布线控制器的对比
序号 | 对比项目 | 微程序控制器 | 硬布线控制器 |
---|---|---|---|
1 | 工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
2 | 执行速度 | 慢 | 快 |
3 | 规整性 | 较规整 | 繁琐、不规整 |
4 | 应用场合 | CISC CPU | RISC CPU |
5 | 易扩充性 | 易扩充修改 | 困难 |
7.6 指令流水线
采用流水线技术只需增加少量硬件就能够把计算机的运算速度提高几倍,并行处理技术
阶段
- 取指
- 分析
- 执行
当多条指令在处理器执行
- 顺序执行方式
- 流水线执行方式
流水线的分类
- 部件功能级、处理机级和处理机间级流水线
- 单功能流水线和多功能流水线
- 动态流水线和静态流水线
- 线性流水线和非线性流水线
影响流水线的因素
资源冲突【结构相关】【资源重复配置+数据存储器+指令存储器】
数据冲突【数据相关】【同步】
- 写后读(Read After Write,RAW)
- 读后写(Write After Read ,WAR)
- 写后写(Write AfterWrite,WAW)
控制冲突【控制相关】
流水线的性能指标
- 流水线的吞吐率
TP = n/Tk
- 流水线的加速比
S = T0/Tk
- 流水线的效率
E = T0/(kTk)
超标量流水线
- 超标量流水线技术
- 超流水线技术
8. 总线
总线是一组能为多个部件分时共享的公共信息传送线路,分时和共享
8.1 总线属性
总线设备
- 主设备
- 从设备
总线特性
- 机械特性(尺寸、形状)
- 电气特性(传输方向、有效的电平范围)
- 功能特性(每根传输线的功能)
- 时间特性(信号和时序的关系)
总线的猝发传输方式
在一个总线周期内传输存储地址连续的多个数据字的总线传输方式
总线的分类
- 片内总线
- 系统总线
- 地址总线
- 数据总线
- 控制总线
- 通信总线
- 并行总线
- 串行总线
系统总线的结构
- 单总线结构
- 双总线结构
- 三总线结构
总线的性能指标
- 总线的传输周期
- 总线时钟周期
- 总线的工作频率
- 总线的时间频率
- 总线带宽(不是总线宽度)
总线带宽 = (总线宽度/8)* 总线频率
(总线工作频率)22*(16/8)
- 总线复用
- 信号线数
8.2 总线仲裁
- 集中仲裁方式
- 链式查询方式
- 计数器定时查询方式
- 独立请求方式
- 分布仲裁方式
分布仲裁方式不需要中央仲裁器,每个潜在的
- 表10 三种集中仲裁方式的区别和联系
序号 | 对比项目 | 链式查询 | 计数器定时查询 | 独立请求 |
---|---|---|---|---|
1 | 控制线数 | 3(总线请求:1;总线忙:1;总线允许:1;) | [log2n] + 2(总线请求:1;总线忙:1;总线允许:[log2n];) | 2n+1(总线请求:n;总线忙:n;总线允许:1;) |
2 | 优点 | 优先级固定;结构简单;扩充容易 | 优先级灵活 | 响应速度快,优先级灵活 |
3 | 缺点 | 对电路故障敏感,优先级不灵活 | 控制线路多;控制复杂 | 控制线多;控制复杂 |
8.3 总线操作和定时
总线传输的4个阶段
- 申请分配阶段
- 寻址阶段
- 传输阶段
- 结束阶段
同步定时方式【同步通信】
系统采用一个统一的时钟信号来协调发送和接收双方的传送定时关系
- 异步定时方式
- 不互锁方式
- 半互锁方式
- 全互锁方式
8.4 总线标准
- ISA【并行】
- EISA【并行】
- VESA
- PCI
- PCI-Express【PCI-E】
- AGP
- RS-232C
- USB
- PCMCIA
- IDE
- SCSI
- SATA
9. 输入/输出系统
输入输出是以主机为中心
9.1 基本属性
- 外部设备
- 接口
- 输入设备
- 输出设备
- 外存设备
- I/O软件
- I/O硬件
9.2 I/O控制方式
- 程序查询方式
- 程序中断方式
- DMA方式【直接内存访问】
- 通道方式
9.3 外部设备
输入设备
- 键盘
- 鼠标
输出设备
显示器
- 屏幕大小
- 分辨率
- 灰度级
- 刷新
- 刷新频率
- 显示存储器【VRAM】
- 阴极射线管(CRT)显示器
- 字符显示器
- 图形显示器
- 液晶显示器【LCD】
- LED(发光二极管)显示器
- 阴极射线管(CRT)显示器
打印机
- 针式打印机
- 喷黑式打印机
- 激光打印机
外存储器
- 磁盘存储器
- 磁盘阵列
- RAID0
- RAID1
- RAID2
- RAID3
- RAID4
- RAID5
- 光盘存储器
- CD-ROM
- CD-R
- CD-RW
- DVD-ROM
- 固态硬盘
- Flash Memory
9.4 I/O接口
I/O接口的功能
- 实现主机和外设的通信联络控制
- 进行地址译码和设备选择
- 实现数据缓冲
- 信号格式的转换
- 传送控制信号和状态信息
I/O接口的基本结构
接口和端口不是同一个概念,端口是指接口电路中可以进行读/写的寄存器,若干端口加上相应的控制逻辑才可以组成接口
I/O接口的类型
- 按照数据传送方式
- 并行接口【一个字节或一个字的所有位】
- 串行接口【一位一位】
- 按照主机访问I/O设备的控制方式
- 程序查询接口
- 中断接口
- DMA接口
- 按功能选择的灵活性
- 可编程接口
- 不可编程接口
- 按照数据传送方式
I/O端口及其编址
- 统一编址【存储器映射方式】
- 独立编址【I/O映射方式】
9.5 I/O方式
程序查询方式
- CPU执行初始化程序,并预置传送参数
- 向I/O接口发出命令字,启动I/o设备
- 向外设接口读取其状态信息
- CPU不断查询I/O设备状态,直到外设准备就绪
- 传送一次数据
- 修改地址和计数器参数
- 判断传送是否结束,若未结束转第三步,直至计数器位为0
程序中断方式
- 异常和中断
- 异常
- 故障
- 自陷
- 终止
- 外部中断
- 异常
- 异常和中断
中断的作用
- 实现CPU与I/O设备的并行工作
- 处理硬件故障和软件错误
- 实现人机交互,用户干预机器需要用到中断系统
- 实现多道程序,分时操作,多道程序的切换需借助于中断系统
- 实时处理需要借助中断系统来实现快速响应
- 实现应用程序和操作系统(管态程序)的切换,也称为“软中断”
- 多处理器系统中各处理器之间的信息交流和任务切换
中断的工作流程
- 中断请求
内中断皆为不可屏蔽中断
- 中断判优
- CPU响应中断的条件
- 中断源有中断请求
- CPU允许中断及断开中断
- 一条指令执行完毕,且没有更紧迫的任务
- 中断响应
- 关中断
- 保存断点
- 引出中断服务程序
- 中断向量
- 中断处理过程
- 关中断
- 保存断点
- 引出中断服务程序
- 保存现场和屏蔽字
- 开中断
- 执行中断服务程序
- 关中断
- 恢复现场和屏蔽字
- 开中断\中断返回
多重中断和中断屏蔽技术
- 在中断服务程序中提前设置开中断指令
- 优先级别高的中断源有权中断优先级别低的中断源
9.6 DMA方式
- DMA方式特点
- 它使主存和CPU的固定联系脱钩,主存既可被CPU访问,又可以被外设访问
- 在数据块传送时,主存地址的确定,传送数据的计数等都由硬件电路直接实现
- 主存中要开辟专用缓冲区,及时供给和接收外设的数据
- DMA传送速度快,CPU和外设并行工作,提高了系统效率
- DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理
- DMA控制器的组成
- 主存地址计数器
- 传送长度计数器
- 数据缓冲寄存器
- DMA请求触发器
- 控制/状态逻辑
- 中断机构
- DMA的传送方式
- 停止CPU访问
- 周期挪用 [周期窃取]
- DMA与CPU交替访存
- DMA传送过程
- 预处理
- 数据传送
- 后处理
10. 总结
本次对于计算机组成原理有了较深刻的理解,对于以前一些不懂的知识有了融汇贯通的感觉,同时也明白自己的渺小.