组成原理在计算机系统中的位置:
目的与意义:
构建系统框架,以建立完整计算机系统概念。
学习路线:
00 - 概述
0-1 计算机发展简史
- IAS通用计算机模型机:冯·诺依曼结构 (真空管/电子管)
- IBM360系列机:引入兼容性(系列机)概念 (晶体管)
- DEC PDP-8:引入总线结构 (SSI/MSI 小规模/中规模集成电路)
- LSI/VLSI/ULSI (大规模/甚大规模/超大规模集成电路)
*注:(普林斯顿高等研究院 the Institute for Advance Study at Princeton,IAS )
0-1-1 第一代(冯·诺依曼)(1946 - 1957)
五个基本部件:运算器 + 控制器 + 存储器 + 输入设备 + 输出设备
- 运算器:算术运算 + 逻辑运算 + 附加运算
- 控制器:应该能自动执行指令
- 存储器:存放数据 + 存放指令
- 输入输出设备:操作人员通过I/O与主机进行通信
内部以二进制表示数据和指令【每条**指令由操作码和地址码两部分组成**】;采用“存储程序”工作方式。
0-1-2 第二代(晶体管)(1958 - 1964)
元器件:逻辑元件采用晶体管;内存由磁芯构成;外存由磁鼓和磁带。
特点:变址;浮点运算;多路存储器;I/O处理机;中央交换结构(非总线)
软件:使用高级语言,提供系统软件
0-1-3 第三代(集成电路)(1965 - 1971)
元器件:逻辑元件与主存储器均有集成电路(IC)实现
特点:微程序控制,Cache,虚拟存储器,流水线等
0-1-4 第四代(L/VL/ULSI+半导体)(1972 - )
元器件:微处理器 + 半导体存储 技术发展迅猛
特点:共享存储器,分布式存储器大规模发展并行处理系统
0-2 计算机系统的组成和层次结构
计算机组成
- 硬件:CPU + MM + I/O
- 软件:系统软件 + 应用软件
计算机层次结构
- 硬件和软件的接口:指令系统
- 计算机软件如何在硬件上执行
0-2-1 计算机组成
- CPU:中央处理器
- PC:程序计数器
- ALU (Arithmetic Logic Unit ):算术逻辑部件
- IR:指令寄存器
- MAR:存储器地址寄存器
- MDR:存储器数据寄存器
- GPRs:通用寄存器(由若干通用寄存器组成,早期就是累加器)
0-2-2 工作流程
程序由指令组成
- 执行前(采用“存储程序”工作方式,程序由指令组成,启动后计算机逐条执行)
- 数据和指令都存放到存储器,每条指令和每个数据都有地址
- 指令按序存放;由OP, ADDR字段组成
- 程序起始地址置PC
- 执行中(指令和数据从存储器提取存放到CPU中的寄存器(指令存放IR,数据存放GPR)中)
- 根据PC取指令
- 操作性质(操作码)
- 源操作数/源操作数2 (立即数,寄存器编号,存储地址)
- 目的操作数地址(寄存器编号,存储地址)
- 指令译码
- 取操作数
- 指令执行
- 回写结果
- 修改PC值
- 根据PC取指令
- 继续执行下一条指令
0-2-3 计算机层次结构
SOFTWARE 软件
- 系统软件
- 操作系统
- 语言处理系统
- 翻译程序
- 汇编程序(汇编语言源程序 –> 机器目标程序)
- 编译程序(高级语言源程序 –> 汇编/机器目标程序)
- 解释程序(将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件)
- 翻译程序
- 其他实用程序(磁盘碎片整理程序、备份程序)
- 应用软件
01 - 数据的机器表示
1-1 数值数据的表示
三要素:
- 进位计数制(二进制、八、十、十六进制 及 相互转换)
- 定点、浮点表示(解决小数点问题)
- 定点正数、定点小数
- 浮点数(一个定点整数和一个定点小数来表示)
- 如何用二进制编码(解决正负号问题)
- 原码、补码、反码(少见)、移码
1-1-1 补码的表示
特性——模运算( ‘+’ 和 ‘-‘ 的统一)。
结论1:一个负数的补码等于模减该负数的绝对值。
结论2:对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。
二进制中,一个负数的补码等于对应正数补码的“各位取反、末位加1”
1 | //例如,十二进制中 |
e.g.3 8-bit range
1101 0110 -010 1001+0000 0001 = -010 1010 = -(2+8+32)=-42
1-1-2 移码的表示
一般来说,当编码位数为n时,偏置常量取 2^(n-1)
1 | E.g. |
特性:移码主要用来表示浮点数阶码!便于浮点数加减运算时的对阶操作(比较大小)。
1-1-3 无符号整数 vs 有符号整数
① 扩充操作
e.g. MIPS提供了两种加载指令(load byte unsigned / load byte)
- 无符号数 lbu $t0, 0($s0) 【$t0高24位补0】(0扩展)
- 有符号数 lb $t0, 0($s0) 【$t0高24位补符】(符号扩展)
② 数的比较
- 无符号数:MSB为1的数比MSB为0的数大(MSB:最高有效位)
- 带符号整数: MSB为1的数比MSB为0的数小
1 | //若 |
③ 溢出判断
- MIPS规定:无符号数运算溢出时,不产生“溢出异常”
1-1-4 科学计数法 & 浮点数
① IEEE754标准 - 32位浮点数
- E是阶码,用移码表示
- M是尾数,表示值为1.M,1为隐含值
- 1≤E≤254: X = (-1)s * 2^(E-127) * 1.M 规格化的浮点数
- E=0, M=0: 表示机器0
- E=255, M=0: 表示一个无穷大的数
- E=255, M!=0: 表示一个非数值
② IEEE754标准 - 64位浮点数
1-2 非数值数据的表示
1-2-1 逻辑数据
- 表示
- 用1位表示。例如,真:1 / 假:0
- n位二进制数可表示n个逻辑数据,或一个位串
- 运算
- 按位进行
- 如,按位与 / 按位或 / 逻辑左移 / 逻辑右移 等
- 识别
- 逻辑数据和数值数据在形式上并无差别,也是一串0/1序列,机器靠指令来识别
- 位串
- 用来表示若干个状态位或控制位(OS中使用较多)
1-2-2 西文字符
- 特点
- 只对有限个字母和数学符号、标点符号等辅助字符编码
- 所有字符总数不超过256个,使用7或8个二进位可表示
- 表示(常用编码为7位ASCII码)
- 十进制数字:0/1/2…/9 【48-57】
- 英文字母:A/B/…/Z/a/b/…/z 【65-90;97+122】
- 专用符号:+/-/%/*/&/……
- 控制字符(不可打印或显示)
- 操作
- 字符串操作。如:传送/比较 等
1-2-3 汉字
- 特点
- 数量巨大,总数超过6万字
- 给汉字在计算机内部的表示、汉字的传输与交换、汉字的输入和输出等带来了一系列问题
- 编码形式
- 输入码:对汉字用相应按键进行编码表示,用于输入
- 内码:用于在系统中进行存储、查找、传送等处理
- 字模点阵或轮廓描述:描述汉字字模点阵或轮廓,用于显示/打印
1-3 数据宽度、存储排列、纠/检错
1-3-1 数据的基本宽度
- bit是计算机中处理、存储、传输信息的最小单位
- byte是二进制信息的计量单位
- 计算机存储器按byte编址,byte是最小可寻址单位
- 字 (word) /字长
- “字”表示被处理信息的单位,用来度量数据类型的宽度。
- “字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度等
- 字和字长的宽度可以一样,也可不同。
1-3-2 数据量的度量
- 容量 KB/MB/GB/TB (Byte)
- 通讯中带宽 Kb/s Mb/s Gb/s Tb/s (bit)
1-3-3 程序中数据类型的宽度
C声明 | 典型32位机器 | Compaq Alpha 机器 |
---|---|---|
char short int int long int |
1 2 4 4 |
1 2 4 8 |
char* | 4 | 8 |
float double |
4 8 |
4 8 |
1-3-4 ★数据的存储和排列顺序
ISA设计需要考虑到的问题
- 如何根据一个地址取到一个32的字【字的存放问题】
- 一个字能否存放在任何地址边界【字的边界对齐问题】
① 大端方式 Big Endian
MSB所在地址是数的地址,如,IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA
【高位字节排放在内存的低地址端】
② 小端方式 Little Endian
LSB所在地址是数的地址,如,Intel 80x86, DEC VAX
【低位字节排放在内存的低地址端】
③ 例
1-3-5 字节交换问题
- 每个系统内部是一致的,但在系统间通信时可能会发生问题!
- 因为顺序不同,需要进行顺序转换
例如,音、视频和图像等文件格式或处理程序都涉及到字节顺序问题
- Little endian: GIF, PC Paintbrush, Microsoft RTF, etc
- Big endian: Adobe Photoshop, JPEG, MacPaint, etc
1-3-6 对齐
要求数据的地址是相应的边界地址。
目前机器字长一般为32位或64位,而存储器地址按字节编址,指令系统支持对**字节、半字、字及双字的运算**,也有位处理指令。
各种不同长度的数据存放时,有两种不同的处理方式
- 按边界对齐(以存储字的宽度为32位,按字节编址为例)
- 字地址:4的倍数(低2位为0)
- 半字地址:2的倍数(低位为0)
- 字节地址:任意
- 不按边界对齐
- 坏处:可能会增加访存次数
1-3-7 校验码
① 奇偶校验码
在数据码之外增加1位校验码。
- 奇校验码:使整个校验码的1的个数为奇数。
- 偶校验码:使整个校验码的1的个数为偶数。
例子
数据码 | 偶校验码 | 奇校验码 |
---|---|---|
0 0 0 1 | 0 0 0 1 1 | 0 0 0 1 0 |
0 1 0 1 | 0 1 0 1 0 | 0 1 0 1 1 |
② 海明检错与纠错码
太复杂不想看了
③ 循环冗余码(CRC)
计算机网络里学
02 - 运算方法和运算部件
2-1 运算和运算部件
不同层次程序员看到的运算及ALU。
2-1-1 高级语言程序中涉及的运算
- 算术运算
- 无符号数、带符号整数、浮点数的 + - * / 运算
- 按位运算
- 用途:对位串实现掩码操作或其他处理(主要用于多媒体数据或状态/控制信息进行处理)
- 操作:|(按位或) &(按位与) ~(按位取反) ^(按位抑或)
- 逻辑运算
- 用途:关系表达式 e.g. or and not
- 操作:|| && !
- 移位运算
- 用途:提取部分信息;扩大/缩小数值 2 4 8 …… 倍
- 操作:>> <<
- 位扩展和位截断运算
- 用途:类型转换时可能需要数据扩展或截断
- 操作:无专门运算符
2-1-2 ALU
- 全加器、串行加法器、先行进位加法器
- 串行ALU、先行进位ALU(单级/多级)
- MSI芯片级联、直接做在CPU芯片内
2-2 定点数运算
2-2-1 n位整数加/减法运算器
2-3 浮点数运算
03 - 指令系统
Instruction Set
- 指令系统的设计
- 程序的机器级表示
3-1 指令系统的设计
指令系统处在计算机软件/硬件的交界面上,同时被硬件设计者和系统程序员所关注,也决定了计算机的性能和成本。
- 硬件设计者:指令系统为CPU提供功能需求,要求易于硬件设计
- 系统程序员:通过指令系统来使用硬件,要求易于编译器的实现
3-1-1 指令内容
一条指令应该明显或隐式包含的信息有哪些?
- 操作码:指定操作类型
- 操作码长度:固定/可变
- 源操作数参照:一个或多个源操作数所在的地址
- 操作数来源:主(虚)存 / 寄存器 / I/O端口 / 指令本身
- 结果值参照:产生的结果存放何处(目的操作数)
- 结果地址:主(虚)存 / 寄存器 / I/O端口
- 下一条指令地址
- 下条指令地址 :主(虚)存
- 正常情况隐含在PC中,改变顺序时由指令给出
3-1-2 指令的类型
- 零地址:op
- 一地址:op a1
- 二地址:op a1 a2
- 三地址:op a1 a2 a3
- 多地址:用于成批数据处理的指令,如:向量 / 矩阵等运算的SIMD指令。
3-1-3 指令执行周期
3-1-4 操作数类型和存储方式
操作数是指令处理的对象,与高级语言数据类型对应。
- 地址(指针)
- 视作无符号数,用来参加运算/确定主(虚)存
- 数值数据
- 定点数(整数):一般用二进制补码表示
- 浮点数(实数):大多数机器用IEEE
- 位、位串、字符和字符串
- 文本、声音、图像
- 逻辑(bool)数据
- 按位操作
3-1-5 ★寻址方式
根据地址找到指令或操作数的方法。地址码编码由操作数的寻址方式决定。
编码原则:
- 指令地址码尽量短
- 操作数存放位置灵活,空间应尽量大
- 利于编译器优化,产生高效代码
- 地址计算过程尽量简单
① 指令寻址
- 正常:PC增值
- 跳转(jump / branch / call / return):同操作数的寻址
② 操作数寻址
- 操作数来源:寄存器、外设端口、主(虚)存、栈顶
- 操作数结构:位 / 字节 / 半字 / 字 / 双字 / 一维表 /二维表 / ……
通常寻址方式特指操作数的寻址方式。
③ 方式的确定
- 无专门的寻址方式位(由操作码确定寻址方式)
- 如MIPS指令,一条指令中最多仅有一个主(虚)存地址,且仅有一到两种寻址方式,Load/store型机器指令属于这种情况。
- 有专门的寻址方式位
- 如x86指令,一条指令中有多个操作数,且寻址方式各不相同,需要各自说明寻址方式,每个操作数都有专门的寻址方式位
④ 基本寻址方式
A:地址字段值 R:寄存器编号 EA:有效地址 (X):X中的内容
方式 | 算法 | 主要优点 | 主要缺点 |
---|---|---|---|
立即 | 操作数=A | 指令执行速度快 | 操作数幅值有限 |
直接 | EA=A | 有效地址计算简单 | 地址范围有限 |
间接 | EA=(A) | 有效地址范围大 | 多次存储器访问 |
寄存器 | 操作数=(R) | 指令执行快,指令短 | 地址范围有限 |
寄间接 | EA=(R) | 地址范围大 | 外存储器访问 |
偏移 | EA=A+(R) | 灵活 | 复杂 |
堆栈 | EA=栈顶 | 指令短 | 应用有限 |
⑤ ★偏移寻址方式 EA=A+(R)
R可以为 PC、B、I。( B:基址寄存器 I:变址寄存器)
- 相对寻址 EA = A + (PC)
- 相对于当前指令处位移量为A的单元
- 指令地址码给出一个偏移量(带符号数)A
- 基准地址隐含由PC给出
- 用来实现程序(公共子程序)的浮动 或 指定转移目标地址
- 基址寻址 EA = A + (B)
- 相对于基址(B)处位移量为A的单元
- 指令地址码给出一个偏移量A
- 基准地址明显或隐含由基址寄存器B给出
- 用来实现多道程序重定位 或 过程调用中参数的访问
- 变址寻址 EA = A + (I)
- 相对于首址A位移量为(I)的单元
- 指令地址码给出一个基准地址A
- 循环重复操作提供一种高效机制,实现对线性表的操作
⑥ 指令格式
3-2 程序的机器级表示
【未完 学半道发现不考】