指令系统
指令集体系结构 (ISA) 定义了{软件}和{硬件}之间的接口
指令集体系结构 (ISA) 是计算机的抽象模型,是硬件和软件之间的接口。它定义了程序员(特别是编译器和汇编语言程序员)需要了解的、用以编写能在该处理器上正确运行的机器代码的所有信息。它规定了处理器“能做什么”,但不关心“如何实现”。
与之相对的是微体系结构 (Microarchitecture),它描述了ISA的具体实现方式,比如流水线的深度、缓存的大小、加法器的具体电路设计等。这些是“如何实现”的细节。
指令寻址
指令寻址分为两大方法
- {顺序寻址 (PC 自动加一获取下一个地址)}
- {跳跃寻址 (转移指令转移到不同的指令地址)}
CPU 始终要根据PC中的内容, 再去主存中获取指令
Q: 使用流水线的CPU中
PC什么时候+1?
A: 取指之后,译码之前
分支指令
bne:它检查CPU状态寄存器中的Z标志位(零标志位):如果Z标志位为0(即不相等或不为零),则程序将跳转到指定的标签处继续执行;如果Z标志位为1,则顺序执行下一条指令。
beq:它检查CPU状态寄存器中的Z标志位(零标志位):如果Z标志位为1(即相等或为零),则程序将跳转到指定的标签处继续执行;如果Z标志位为0,则顺序执行下一条指令。
数据寻址
| 寻址方式 | 有效地址 | 访存次数 |
|---|---|---|
| 隐含寻址 | 程序指定 | 0 |
| 立即寻址 | A 即是操作数 | 0 |
| 直接寻址 | EA = A | 1 |
| 一次间接寻址 | EA = (A) | 2 |
| 寄存器寻址 | EA = Ri | 0 |
| 寄存器间接寻址 | EA = (Ri) | 1 |
| 寄存器间接一次寻址 | (PC) + 1 → PC | 1 |
| 相对寻址 | EA = (PC) + A | 1 |
| 基址寻址 | EA = (BR) + A | 1 |
| 变址寻址 | EA = (IX) + A | 1 |
Q: 隐含寻址的定义
A: 某个操作数不是显式表示, 而是隐含约定在其他位置
Q: 立即 (数) 寻址定义
A: 指令字中的地址字段指出的不是操作数的地址, 而是操作数本身, 也称立即数
Q: 立即寻址中的操作数使用哪种机器数表示?
A: 采用补码表示
Q: 直接寻址, 画图
A: 
Q: 间接寻址, 画图
A: 
Q: 寄存器寻址, 画图
A: 
Q: 寄存器间接寻址, 画图
A: 
Q: 相对寻址, 画图
A: 
Q: 相对寻址的形式地址用哪种机器数表示? 可以有正负吗?
A: 用补码表示, 可正可负
Q: 基址寻址, 画图
分为专用寄存器与通用寄存器
A: 
Q: 变址寻址, 画图
A: 
Q: 堆栈寻址
软堆栈与硬堆栈的区别
A: 硬堆栈: 在寄存器组中划出一段区域来做堆栈
软堆栈: 在主存中划出一段区域来做堆栈
Q: 三大偏移寻址是?
A: 相对寻址, 基址寻址, 变址寻址
相对寻址与基址寻址, 变址寻址的区别
相对寻址以{PC}的值为初始地址
基址寻址, 变址寻址都以{寄存器}的值为初始地址
Q: 基址寻址与变址寻址的区别 (面向对象)
A: 基址寻址面向系统, 主要用于为多道程序或数据分配存储空间,
变址寻址面向用户, 主要用于处理数组问题,
基址寻址与变址寻址的可变性
基址寄存器值{c1: 不可变}, 而指令字中的 A 是{c1: 可变}
变址寄存器值{c2: 可变}, 而指令字中的 A 是{c2: 不可变}
CISC 和 RISC 的基本概念
CISC 与 RISC 控制器实现
CISC 控制器大多数采用{c1: 微程序}控制
RISC 控制器大多数采用{c1: 硬布线}控制
Q: CISC 与 RISC 谁的通用寄存器数量比较多?
A: RISC
Q: 为什么 RISC 的通用寄存器数量比 CISC 多?
A: 指令读取寄存器比较多, 主存比较少, 自然需要更多的寄存器
Q: RISC访存指令有哪些?
A: 只有 LOAD/STORE (取数/存数) 指令访存
Q: RISC 一定使用流水线技术吗?
A: 是的
Q: 为什么 RISC 一定使用流水线技术?
A: 精简指令集的好处是大部分指令在一个时钟周期内完成
能够在一个时钟周期内完成, 使用流水线技术, 再好不过