3. 指令操作类型
(1)传送类指令
模型机中采用I/O端口和主存统一编址的方式,使用隐式I/O指令。
(2)双地址指令
(3)单地址指令
- COM —— 求反
- NEG —— 求补
- INC —— 加一
- DEC —— 减一
- SL —— 左移
- SR —— 右移
(4)程序控制类指令
(5)转移类指令
条件满足,转向转移地址;否则,按顺序执行。
下面具体介绍JMP、RST、JSR指令。
1. JMP
以 根据有效地址获得的操作数 为转移地址。
X(PC)是特例:
“若指定的寄存器是程序计数器PC,就是相对寻址。取指后PC+1,以修改的PC内容为基准地址,从紧跟现行指令的存储单元中读取偏移量,二者相加,获得有效地址。”
在JMP的第3位到第0位中的某标志位为1,表明以PSW中的对应特征位作为转移条件,因此JMP指令的第3位到第0位与PSW的第3位到第0位分别对应。
JMP的第5位决定转移条件为0有效还是为1有效。
回顾:程序状态字寄存器PSW
每次运算结束后,CPU会根据运算结果自动设置标志位。
转移类指令中的C’代表以C标志位作为转移判断条件,PSW中的C代表C标志位。
JMP/RST指令的最低六位是转移条件字段,其中第5位是条件模式位,第4位未使用(无关项),第3位到第0位指示的标志位与程序状态字PSW的第3位到第0位分别对应。
转移条件字段与对应的功能
4~0位不可能同时出现两个 1,否则不知道该以哪个标志位为转移判断条件。
2. RST
无条件转移
约定只能是SP,只能是(SP)+ —— 出栈。
3. JSR
隐含约定:转子时返回地址必须压栈保存,同时子程序的最后一条指令必须是返回指令。
因为转走以后还要能转回来
- 在子程序中再调用子程序
- 在程序中自己使用堆栈
由图可知,自己的压栈操作和弹栈操作要成对,否则程序无法返回到正确的位置。
三、模型机的组成和数据通路
1. 部件设置
(1)寄存器
可编程寄存器(寄存器位宽为16位)
- 通用寄存器:R0 ~ R3
- 堆栈指针:SP
- 指令计数器:PC
- 程序状态字:PSW
非编程寄存器(寄存器位宽为16位)
- 暂存器C:暂存来自主存的源地址或源数据。
- 暂存器D:暂存来自主存的目的地址或目的数。
- 指令寄存器IR
- 地址寄存器MAR
- 数据寄存器MDR
下面对IR、MAR、MDR进行具体介绍。
指令寄存器IR:用于存放现行指令。
工作流程:
SIR称为置入命令,又称开门信号。
通过R、S端直接置入,速度快!
地址寄存器MAR:CPU访问主存或I/O的地址由MAR提供。
工作流程:
数据寄存器MDR
CPU存入主存或者I/O的内容先放入MDR,读取到的主存或者I/O的内容也先送入MDR。
工作流程1:
MDR可以与CPU内的部件交换数据。
- 接收来自CPU内部总线的数据
- 将数据送入ALU的多路选择器B
工作流程2:
接收来自数据总线的数据。
工作流程3:
将CPU输出的数据送往数据总线。
(2)运算部件设置(位宽为16位)
ALU芯片构成:
- SN74181 4片 —— 组内并行
- SN74182 1片 —— 组间并行
多路选择器:A 和 B —— 用于选择数据来源
移位器:用于实现直传、左移、右移、字节交换