前面我们学习的内容都是不针对特殊的机型的,而从现在开始我们将开始学习模型机。
预告:微机部分我们学的是机型是 8086 和 8088 。
目录
模型机的CPU内部结构:
这个图很重要!
一、CPU设计步骤
- 第一步:拟定指令系统
因为一台计算机的指令系统表明了这台机器所具有的硬件功能。
- 第二步:确定总体结构,核心是数据通路结构
- 第三步:确定控制信号的产生方式并安排时序
我们只需掌握同步控制方式、异步控制方式和扩展同步控制方式即可。
- 第四步:拟定指令流程和微命令序列、
微命令 —— 控制信号
- 第五步:形成控制逻辑
包括:组合逻辑设计和微程序设计
站在这本教材的角度,指令系统就是一个软件系统,我们所说的高级语言充其量是一个工具。
二、模型机的指令系统
0. 说明
模型机采用 寄存器型寻址,即指令中只会给出寄存器编号,不会给出存储单元地址。
我们讨论的指令类型有:双地址类指令格式、单地址类指令格式、转移指令格式。
(1)双地址类指令格式
(2)单地址类指令格式
(3)转移指令格式
11~6:通过寻址得到转移地址
5~0:只是给出了转移条件的形成方式,没有直接给出条件本身
1. 指令格式
- 模型机的指令字长为 16 位 —— 采用定长指令格式
- 模型机的存储单元位宽为 16 位 —— 指令占据一个存储单元
- 模型机的寄存器位宽为 16 位
2. 寻址方式
因为模型机采用 寄存器型寻址,所以其指令的特点是在指令中直接给出寄存器编号(3 位)。
CPU 可编程访问的寄存器 | |
---|---|
通用寄存器 | R0(000)、R1(001)、R2(010)、R3(011) |
堆栈指针寄存器 | SP(100) |
程序状态字寄存器 | PSW(101) |
指令计数器 | PC(111) |
注意:这是在模型机中,在其它机型中不一定能访问后三个寄存器。
- 通用寄存器的特点:① 可编程访问 ② 有编号
- 程序状态字寄存器存储运算结果的状态
(1)0型:寄存器直接寻址
其中,编码是指寻址方式的编码。
假设操作码为 0000,则指令的二进制代码为 0000 001 000 000 000 。
Java既是编译型语言又是解释型语言,既不是编译型语言也不是解释型语言。
(2)1型:寄存器间接寻址
假设操作码为 0000,则指令的二进制代码为 0000 001 000 000 001 。
(3)2型:自减型寄存器间址
- -(R) = (R) - 1
- -(SP):SP 指向栈顶元素,因此此操作对应压栈。
此操作的效果就是把 PC 的内容压入堆栈中保存。
应用:转子指令与返回指令。
(4)3型:自增型寄存器间址
例题
此操作的效果就是把栈顶内容弹给 PC 。我们将弹出的数据视作是无了,因为我们不能修改 SP 内容,所以不能再访问弹出的数据。
由于模型机中没有立即寻址方式,因此把立即寻址的一条指令拆成两条来实现,即一条指令 + 一个立即数。PC 的内容是随着取指和指令的运行动态变化的。
-
②:取指结束,隐含约定的 PC 加 1 。
-
③:寻址结束,寻址方式约定的 PC 加 1 。
如果寻址方式中没有约定 PC + 1,又由于第二次取的不是指令而是数值,PC 将不会隐含 + 1 —— 因为根本没这样约定过 —— 从而导致程序卡死。
流程分析:
(5)4型:自增型双重间址
例题
由于模型机中没有直接寻址方式,因此把直接寻址的一条指令拆成两条来实现,即一条指令 + 一个地址码。PC 的内容是随着取指和指令的运行动态变化的。
-
②:取指结束,隐含约定的 PC 加 1 。
-
③:根据操作数地址得到操作数,并存入 R1 中。
-
④:寻址结束,寻址方式约定的 PC 加 1 。
(6)5型:变址寻址/相对寻址
- 寄存器内容 = 1000H
- 形式地址 = 0080H
- 有效地址 = 寄存器内容 + 形式地址 = 1000H + 0080H = 1080H