指令执行过程¶
概述¶
指令执行过程是计算机工作的核心,理解指令如何被取出、分析和执行对于深入理解计算机系统至关重要。本节详细介绍指令执行的各个阶段和具体步骤。
指令周期¶
指令周期是指取出并执行一条指令所需的全部时间。一个完整的指令周期通常包含以下几个阶段:
1. 取指周期 (Fetch Cycle)¶
从存储器中取出指令的过程。
步骤:
- (PC) → MAR: 将程序计数器PC的内容(指令地址)送到存储器地址寄存器MAR
- M(MAR) → MDR: 将MAR指向的存储单元的内容(指令)送到存储器数据寄存器MDR
- (MDR) → IR: 将MDR的内容(指令)送到指令寄存器IR
- (PC) + 1 → PC: PC自动加1,为取下一条指令做准备
时间: 取指周期时间 = 1个访存时间
2. 间址周期 (Indirect Cycle)¶
如果指令采用间接寻址,需要根据形式地址获取有效地址。
步骤:
- Ad(IR) → MAR: 将指令的地址码字段送到MAR
- M(MAR) → MDR: 将有效地址从存储器读出到MDR
- (MDR) → Ad(IR): 将有效地址送回指令的地址码字段
注意: 只有采用间接寻址的指令才需要间址周期。
3. 执行周期 (Execute Cycle)¶
根据指令的操作码执行相应的操作。
不同指令的执行周期不同:
- 取数指令: 从存储器取操作数到寄存器
- 存数指令: 将寄存器内容存入存储器
- 算术运算指令: 执行算术运算
- 逻辑运算指令: 执行逻辑运算
- 转移指令: 修改PC值,实现程序跳转
4. 中断周期 (Interrupt Cycle)¶
如果有中断请求,需要处理中断。
步骤:
- 保存断点(PC)和程序状态字(PSW)
- 关中断
- 获取中断服务程序入口地址
- 转去执行中断服务程序
注意: 只有在指令执行完成后才会响应中断。
典型指令的执行过程¶
1. 取数指令 (LOAD)¶
功能: 将存储器中的数据取到累加器ACC
指令格式: LOAD A (将地址A的内容取到ACC)
执行步骤:
| Text Only | |
|---|---|
2. 存数指令 (STORE)¶
功能: 将累加器ACC的内容存入存储器
指令格式: STORE A (将ACC的内容存入地址A)
执行步骤:
| Text Only | |
|---|---|
3. 加法指令 (ADD)¶
功能: 将存储器中的数据与ACC相加,结果存入ACC
指令格式: ADD A (ACC + (A) → ACC)
执行步骤:
| Text Only | |
|---|---|
4. 无条件转移指令 (JMP)¶
功能: 无条件转移到指定地址
指令格式: JMP A (PC = A)
执行步骤:
| Text Only | |
|---|---|
5. 条件转移指令 (JZ)¶
功能: 如果零标志位为1,则转移
指令格式: JZ A (如果ZF=1,则PC=A)
执行步骤:
| Text Only | |
|---|---|
指令周期的数据流¶
取指周期数据流¶
间址周期数据流¶
| Text Only | |
|---|---|
执行周期数据流¶
根据指令类型不同而不同。
中断周期数据流¶
指令周期的控制信号¶
取指周期控制信号¶
- PCout, MARin: PC内容输出到总线,写入MAR
- Read: 发出读命令
- MDRout, IRin: MDR内容输出到总线,写入IR
- PC+1: PC自动加1
执行周期控制信号(以加法为例)¶
- IRout, MARin: IR的地址码输出到总线,写入MAR
- Read: 发出读命令
- MDRout, Yin: MDR内容输出到总线,写入Y寄存器
- ACCout, Xout, Add: ACC和Y寄存器内容相加
- Zout, ACCin: 运算结果写入ACC
指令流水线¶
概念¶
指令流水线是指将指令执行过程划分为多个阶段,多条指令的不同阶段可以并行执行,从而提高CPU的吞吐率。
经典的五级流水线¶
- 取指(IF): 从存储器取指令
- 译码(ID): 指令译码,读寄存器
- 执行(EX): 执行运算或计算地址
- 访存(MEM): 访问存储器
- 写回(WB): 结果写回寄存器
流水线的性能指标¶
- 吞吐率: 单位时间内完成的指令数
- 加速比: 流水线方式与串行方式的速度比
- 效率: 流水线各段的利用率
流水线冲突¶
- 结构冲突: 硬件资源冲突
- 数据冲突: 数据依赖关系
- 控制冲突: 转移指令引起