目录
一、机器指令
机器语言由一条条语句构成, 习惯把每一条机器语言的语句称为机器指令, 将全部的机器指令的集合称为机器的指令系统。
80-20规律: 典型程序中80%的语句仅仅使用处理机中的20%的指令, 这些指令都属于简单指令。
RISC: 精简指令系统计算机 (Reduced Instruction Set Computer), 主要特征是用20%的简单指令组合来实现不常用的80%的指令功能。
CISC: 复杂指令系统计算机 (Complex Instruction Set Computer)
1.1 指令的一般格式
指令由操作码和地址码两部分组成。
指令的一般格式图:
1.2 操作码
指明该指令所要完成的操作, 如加法, 乘法, 移位等。位数反映了机器操作种类。
操作码长度可以是固定的, 适用于字长较长的计算机以及RISC, 指令译码时间短。对于不固定的指令, 在字长较短的微型计算机中广泛使用, 会增加指令译码和分析的难度。
可扩展操作码的示意图:
1.3 操作类型
1) 数据传送: 寄存器与存储单元, 存储单元与存储单元,, 寄存器与存储单元,之间的传送。
2) 算术逻辑操作: 算术运算(加,减,乘,除等)与逻辑运算(与,或,非,异或等)。
3) 移位: 左移, 右移。
4) 转移: 无条件转移, 条件转移, 调用与返回, 陷阱与陷阱指令。
5) 输入输出:与I/O设备交互。
6) 其他: 停机指令, 开中断指令等。
1.4 操作数类型
1) 地址
2) 数字: 定点数, 浮点数
3) 字符: 文本或字符串
4) 逻辑数据: 如布尔值
1.5 地址码
地址码用来指出指令的源操作数的地址、结果地址、下一条指令的地址。地址可以是主存的地址, 也可以是寄存器的地址,或是I/O 设备的地址。
以下假设指令字长为32位, 操作码占8位。OP为操作码, A为操作数地址, 地址以主存地址为例。
四地址指令:该指令完成(A1)OP(A2) -->A3的操作, 4个地址各占6位, 直接寻址范围为=64。共需访问4次存储器(取指令一次, 取两个操作数两次, 存放结果一次)。
三地址指令: 该指令完成(A1)OP(A2)-->A3的操作, 程序中大多数指令是按顺序执行的, 后续指令的地址隐含在程序计数器PC中。3个地址字段各占8位, 寻址范围为=256, 需要访问4次存储器。
二地址指令: 该指令完成(A1)OP(A2)-->A1 的操作, A1即代表原操作数, 也代表存放本次运算的结果地址。共需要4次访问存储器; 若为(A1)OP(A2)-->ACC, 只需要两次访存。直接寻址范围为=4K。
一地址指令: 可完成(ACC)OP(A1)-->ACC的操作, 只需两次访存, 直接寻址范围为=16M。
零地址指令: 无地址码部分, 如空操作, 停机, 中断返回等指令, 或是操作数的地址隐含在堆栈指针SP中。
示意图:
二、寻址方式
确定本条指令的数据地址以及下一条将要执行的指令地址的方法, 分为指令寻址与数据寻址。
2.1 指令寻址
分为顺序寻址与跳跃寻址, 顺序寻址可以通过PC加自动形成下一条指令的地址; 跳跃寻址通过转移类指令实现。
指令寻址方式示意图:
2.2 数据寻址
数据寻址方式种类多, 在指令中需设一字段表明是哪一种寻址方式。
一地址指令的格式图:
1) 立即寻址: 操作数本身设在指令字内, 即形式地址就是数据本身, 数据采用补码形式存放。
2) 直接寻址: 指令字中的形式地址A就是操作数的真实地址。
3) 隐含寻址: 不明显给出操作数的地址, 操作数的地址隐含在操作码或某个寄存器中。
4) 间接寻址: 形式地址是操作数的有效地址所在的存储单元地址。与直接寻址相比, 扩大了操作数的寻址范围, 但多次间接寻址时, 可用存储字首位来标记是否还需要继续访存寻址。
5) 寄存器寻址: 地址码字段直接给出了寄存器的编号, 无需访存, 减少执行时间。
6) 寄存器间接寻址: 比间接寻址少访存一次。
7) 基址寻址: 需要设有寄存器BR, 操作数有效地址等于指令字中的形式地址与基址寄存器中的内容相加, 基址寻址可以扩大操作数的寻址范围。
8) 变址寻址: 与基址寻址极为相似, 有效地址等于指令字的形式地址+变址寄存器IX, 处理数组问题时, 只需改变寄存器IX内容, 无需多条指令。
9) 相对寻址: 有效地址是程序计数器PC+指令字中的形式地址, 位移量可正可负。
10) 堆栈寻址: 要求计算机中设有堆栈, 操作数只能从栈顶中存或取, 堆栈寻址可视为一种隐含寻址, 操作数的地址总是被隐含在SP指针中。
三、CPU的结构
CPU内部结构图:
3.1 CPU的基本功能
1) 取指令
2) 分析指令
3) 执行指令
3.2 CPU的寄存器
1) 通用寄存器: 可由程序设计者指定许多功能, 如存放操作数, 满足某种寻址方式所需的寄存器。
2) 数据寄存器: 存放操作数
3) 地址寄存器: 存放地址, 可以具有通用性, 用于特殊寻址方式。
4) 条件码寄存器: 存放条件码
5) MAR寄存器: 存储器地址寄存器
6) MDR寄存器: 存储器数据寄存器
7) PC: 程序计数器
8) IR: 指令寄存器
3.3 指令周期
CPU每取出并执行一条指令所需的全部时间称为指令周期。具体可分为取指周期, 间址周期, 执行周期, 中断周期。指令的操作功能不同, 因此各种指令的指令周期也是不同的。
各种指令周期比较图:
指令流程图:
取指周期数据流:
间址周期数据流:
中断周期数据流:
3.4指令流水
类似与工厂的流水线。
指令的串行执行:
指令的二级流水:
指令的六级流水:
FI: 取指
DI: 指令译码, 确定操作性质和操作数地址的形成方式
CO: 计算操作数地址, 涉及寄存器间接寻址等各种地址计算方式
FO: 取数操作, 从存储器中取操作数, 若操作数在寄存器, 则无此阶段
EI: 执行指令
WO: 写操作数, 将结果存入存储器
3.5 影响流水线性能的因素
1) 结构相关: 在重叠执行过程中, 不同指令争用同一功能部件产生资源冲突, 如访存冲突。
2) 数据相关: 读写先后顺序不同, 影响计算结果。
3) 控制相关: 由转移指令引起, 使流水线的连续流动被破坏。
3.6 流水线性能
1) 吞吐率: 单位时间内流水线所完成指令或输出结果的数量。
2) 加速比: 指m段流水线的速度与等功能的非流水线的速度比。
3) 效率: 流水线中各功能的利用率。
3.6 流水线中的多发技术
IF: 取指
ID: 译码
EX: 执行
WR: 写回
3.6.1 超标量技术
指在每个时钟周期内可同时并发多条独立指令, 即以并行操作方式将两条或两条以上指令编译执行。
超标量流水图:
3.6.2 超流水线技术
将一些流水寄存器插入流水线段中, 好比流水线再分段。
超流水线图:
3.6.3 超长指令字技术
在一个时钟周期内能流出多种指令。把多条能并行操作的指令组合成一条具有多个操作码字段的超长指令。每一个操作码字段控制一个功能部件。
超长指令字图:
四、中断系统
4.1 引起中断的各种因素
1) 人为设置的中断: 如转管指令。
2) 程序性事故: 如定点, 浮点的溢出, 操作码不能识别等。
3) 硬件故障: 插件接触不良, 电源掉电等。
4) I/O设备: I/O设备发起的中断请求。
5) 外部事件: 通过键盘等来中断现行程序。
4.2 中断请求标记
判断具体是那个中断源提出的请求, 需设置中断请求标记触发器, 简称中断请求触发器, 记作INTR。中断请求触发器越多, 说明计算机处理中断的能力越强。
中断请求标记寄存器图:
4.3 中断判优逻辑
任何一个中断系统, 在任何一个时刻, 只能响应一个中断请求。中断系统必须按其优先顺序予以响应。 中断判优可以用硬件实现或软件实现。
4.3.1 硬件排队
以下图为例, 最高优先级的中断源有请求时, 就可以封住比它优先级低的中断源的请求。
排队器原理图:
4.3.2 软件排队
通过编写查询程序实现。
软件查询示意图:
4.4 中断请求服务程序的入口地址
通常有硬件向量法和软件查询法来准确找到服务程序的入口地址。
4.4.1 硬件向量法
利用硬件产生向量地址, 再由向量地址找到中断服务程序的入口地址。速度快, 在现代计算机中被普遍采用。
向量地址形成部件与向量地址表:
4.4.2 软件查询法
与中断判优中的软件查询类似。
4.5 中断响应
EINT: 允许中断触发器, 可被开中断指令置"1" , 或被关中断指令置为"0"。
响应中断的条件: EINT为1, 且有中断请求源。
响应中断的时间: 与响应I/O中断一样, 总是在指令执行周期结束后, 响应任何中断源的请求。若无中断, 则进入下一条指令的取指周期。
中断隐指令: CPU响应中断后, 即进入中断周期, 在中断周期内, CPU自动完成一系列操作。如关中断, 保护程序断点, 寻找中断服务程序的入口地址。
4.6 中断屏蔽技术
中断屏蔽技术主要用于多重中断。
多重中断: CPU在执行某个中断服务程序时, 另一个中断源又提出了新的中断请求, CPU又响应了这个新的请求, 暂时停止正在运行的服务程序。
多重中断示意图:
屏蔽技术: 屏蔽触发器 MASK=1 时, CPU将接受不到中断源的中断请求, 通过屏蔽字, 可与中断源的优先级一一对应。如响应1级中断源的请求后, 设置一个全"1" 的屏蔽字, 便可保证在执行1级中断服务程序过程中, CPU不再响应任何一个中断源。
有屏蔽功能的排队器:
中断优先级与屏蔽字的关系图:
五、控制单元
5.1 控制单元的外特性
输入:
1) 时钟: 控制单元受时钟控制, 使控制单元按一定的先后顺序、一定的节奏发出各个控制信号, 每一个时钟脉冲使控制单元发送一个操作命令, 或发送一组需要同时执行的操作命令。
2) 指令寄存器: 指令的操作码是控制单元的输入信号, 与时钟配合产生不同的控制信号。
3) 标志: 控制单元有时需要以来CPU当前所处的状态产生控制信号。
4) 来自控制总线的控制信号: 如中断请求、DMA请求。
输出:
1) CPU内的控制信号: 用于CPU内寄存器之间的传送和控制ALU实现不同操作。
2) 送至系统总线 (控制总线) 的信号: 如命令主存或I/O读写, 中断响应等。
控制单元外特性框图:
5.2 多级时序系统
机器周期, 节拍组成了多级时序系统。CPU主频反映时钟周期, 机器周期所含时钟周期越少, 速度越快。
机器周期: 机器周期可以看作所有指令执行过程中的一个基准时间, 在这个基准时间内, 所有指令的操作都能结束。只有以完成复杂指令功能所需要的时间(最长时间)作为基准, 才能保证所有指令在此时间内完成全部操作, 通常以访问一次存储器的时间定为基准时间, 即机器周期。取指周期可以看作机器周期 (存储字长等于指令字长的条件下)。
时钟周期: 一个机器周期内可以完成若干个微操作, 每个微操作都需要一定时间, 可用时钟信号来控制产生每一个微操作命令。用时钟信号控制节拍发生器, 就可以产生节拍。每个节拍宽度对应一个时钟周期, 每个节拍内机器可完成一个或几个需要同时执行的操作, 它是控制计算机操作的最小时间单位。
多级时序系统: 一个指令周期包含若干个机器周期, 一个机器周期包含若干个时钟周期, 每个指令周期内的机器周期数可以不等, 每个机器周期内的节拍数也可以不等。
指令周期, 机器周期, 节拍和时钟周期的关系图:
5.3 控制方式
控制不同微操作序列所采用的时序控制方式称为 CU 的控制方式。
5.3.1 同步控制方式
任何一条指令或微操作的执行都是事先确定的, 并且受统一基准时标的时序信号所控制的方式。
1) 采用定长的机器周期: 一律以最长的微操作序列和最繁的微操作作为标准, 会造成时间上的浪费。
2) 采用不定长的机器周期: 把大多数微操作安排在一个较短的机器周期内完成, 对于复杂微操作, 采用延长机器周期或增加节拍的办法来解决
延长机器周期示意图:
3) 采用中央控制和局部控制相结合的方法: 将机器的大部分指令安排在统一的, 较短的机器周期内完成, 称为中央控制, 将少数操作复杂的指令中的某些操作 (如: 乘除法和浮点运算) 采用局部控制方式来完成。
示意图:
5.3.2 异步控制方式
不存在基准时标信号, 没有固定的周期节拍和严格的时钟同步, 由专门的应答线路控制, 即执行部件完成操作后发回 "回答" 信号,再开始新的微操作, 需要采用各种应答电路, 较同步控制方式复杂。
5.3.3 联合控制方式
同步控制和异步控制相结合, 对各种不同指令的微操作实行大部分统一, 小部分区别对待的办法。
5.3.4 人工控制方式
为了调机和软件开发的需要, 在机器面板或内部设置一些开关或按键, 来达到人工控制的目的。
六、控制单元设计
6.1 组合逻辑设计
1) 列出微操作命令的操作时间表
2) 写出微操作命令的最简逻辑表达式
3) 画出微操作命令的逻辑图
图: 太难, 赶紧跑!
6.2 微程序设计
将一条机器指令编写成一个微程序, 每一个微程序包含若干条微指令, 每一条微指令对应一个或几个微操作命令。然后把这些微程序存到一个控制存储器中。
微程序控制单元的基本框图:
6.3 微指令的编码方式
6.3.1 直接编码
每一位代表一个微操作命令。
直接编码方式图:
6.3.2 字段直接编码方式
将微指令的操作控制字段分成若干段, 将一组互斥的微操作命令存放在一个字段内, 通过对这个字段译码, 便可对应每一个微命令。
可用较少的二进制信息表示较多的微操作命令信号, 但增加了译码电路, 执行速度稍微减慢。
字段直接编码图:
6.3.3 混合编码
把直接编码和字段编码混合使用。
6.4 微指令序列地址的形成
1) 直接由微指令的下地址字段指出
2) 根据机器指令的操作码形成
3) 增量计数器: 即(CMAR) --> CMAR
4) 分支转移
5) 由硬件产生微程序入口地址: 响应中断时
后续微指令地址形成方式的原理图: