指令周期的基本概念
指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。
指令周期常常用若干个机器周期来表示,机器周期又叫CPU周期。
一个机器周期又包含若干个时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。
每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。
指令周期流程
MOV指令(RR型指令)的指令周期
取指周期
(1)程序计数器PC中装入第一条指令地址101;
(2)PC的内容被放到指令总线ABUS(I)上,对指令进行译码,并启动读命令;
(3)从101号地址读出的MOV指令通过指令总线IBUS装入指令寄存器IR;
(4)程序计数器PC内容+1,变成102,为取下一条指令做好准备;
(5)指令寄存器中的操作码OP被译码;
(6)CPU识别出是MOV指令。至此,取指周期结束。
执行周期
(1)操作控制器OC送出控制信号到通用寄存器,选择R1(10)作为源寄存器,选择R0作目标寄存器。
(2)OC送出控制信号到ALU,指定ALU做传送操作;
(3)OC送出控制信号,打开ALU输出三态门,将ALU输出送到数据总线DBUS上。注意,任何时候DBUS上只能有一个数据;
(4)OC送出控制信号,将DBUS上的数据打入到数据缓冲寄存器DR(10);
(5)OC送出控制信号,将DR中的数据10打入到目标寄存器R0,R0的内容由00变为10。
三条总线:ABUS(指令地址总线)、IBUS(指令总线)、DBUS(数据总线)
执行周期中的每一个操作都由操作控制器OC送出控制信号来执行。
LAD指令的指令周期
LAD 指令是 RS 型指令,它先从指令存储器取出指令,然后从数据存储器 6 号单元取 出数据 100 装入通用寄存器 R1,原来 R1 中存放的数据 10 被更换成 100。由于一次访问指存,一次访问数存,LAD 指令的指令周期需要 3 个 CPU 周期。
取指周期
(1)程序计数器PC中装入第一条指令地址102;
(2)PC的内容被放到指令总线ABUS(I)上,对指令进行译码,并启动读命令;
(3)从102号地址读出的LAD指令通过指令总线IBUS装入指令寄存器IR;
(4)程序计数器PC内容+1,变成103,为取下一条指令做好准备;
(5)指令寄存器中的操作码OP被译码;
(6)CPU识别出是LAD指令。至此,取指周期结束。
执行周期
(1)操作控制器OC发出控制命令打开IR输出三态门,将指令中的直接地址码6放到数据总线DBUS上;
(2)OC发出操作命令,将地址码6装入数存地址寄存器AR;
(3)OC发出读命令,将数存6号单元中的数100读出到DBUS上;
(4)OC发出命令,将DBUS上的数据100装入缓冲寄存器DR;
(5)OC发出命令,将DR中的数100装入通用寄存器R1,原来R1中的数10被冲掉。至此,LAD指令执行周期结束。
注意,数据总线DBUS上分时进行了地址传送和数据传送,所以需要2个CPU周期。
RS型指令有三个CPU周期,一次访问指存,一次访问数存,还有一次执行;
取指周期都一样,具体差别在执行周期上。
ADD指令的指令周期
ADD 指令是 RR 型指令,在运算器中用两个寄存器 R1 和 R2的数据进行加法运算。指 令周期只需两个 CPU 周期,其中一个是取指周期,另一个是执行周期。
取指周期
(1)程序计数器PC中装入第一条指令地址103;
(2)PC的内容被放到指令总线ABUS(I)上,对指令进行译码,并启动读命令;
(3)从103号地址读出的LAD指令通过指令总线IBUS装入指令寄存器IR;
(4)程序计数器PC内容+1,变成104,为取下一条指令做好准备;
(5)指令寄存器中的操作码OP被译码;
(6)CPU识别出是ADD指令。至此,取指周期结束。
执行周期
(1)操作控制器OC送出控制命令到通用寄存器,选择R1做源寄存器,R2做目标寄存器;
(2)OC送出控制命令到ALU,指定ALU做R1(100)和R2(20)的加法操作;
(3)OC送出控制命令,打开ALU输出三态门,运算结果120放到DBUS上;
(4)OC送出控制命令,将DBUS上数据打入缓冲寄存器DR;ALU产生的进位信号保存在状态字寄存器PSWR中;
(5)OC送出控制命令,将DR(120)装入R2,R2中原来的内容20被冲掉。至此,ADD指令执行周期结束。
STO指令的指令周期
STO 指令是 RS 型指令,它先访问指存取出 STO 指令,然后按(R3)=30 地址访问数存,
将(R2)=120 写入到 30 号单元。由于一次访问指存,一次访问数存,因此指令周期需 3 个
CPU 周期,其中执行周期为 2 个 CPU 周期。
取指周期
(1)程序计数器PC中装入第一条指令地址104;
(2)PC的内容被放到指令总线ABUS(I)上,对指令进行译码,并启动读命令;
(3)从104号地址读出的LAD指令通过指令总线IBUS装入指令寄存器IR;
(4)程序计数器PC内容+1,变成105,为取下一条指令做好准备;
(5)指令寄存器中的操作码OP被译码;
(6)CPU识别出是STO指令。至此,取指周期结束。
执行周期
(1)操作控制器OC送出操作命令到通用寄存器,选择(R3)=30做数据存储器的地址单元;
(2)OC发出操作命令,打开通用寄存器输出三态门(不经过ALU以节省时间),将地址30放到DBUS上;
(3)OC发出操作命令,将地址30打入AR,并进行数存地址译码;
(4)OC发出操作命令到通用寄存器,选择(R2)=120,作为数存的写入数据;
(5)OC发出操作指令,打开通用寄存器输出三态门,将数据120放到DBUS上;
(6)OC发出操作命令,将数据120写入数存30单元,它原先的数据40被冲掉。至此,STO指令执行周期结束。
注意,DBUS是单总线结构,先送地址(30),后送数据(120),必须分时传送。
总结
MOV指令 和 ADD指令 都是RR指令;类型相同,执行周期过程也相同
操作流程:
到通用寄存器中找到目标寄存器和源寄存器地址
告诉ALU它要做什么运算(加法还是传送)
将处理好的数据通过ALU三态门输出到DBUS总线上
将数据打入到DR(数据缓冲寄存器)
将数据覆盖掉目标寄存器中原有的数据
结束
LAD指令和STO指令都是RS指令,之所以相较于RR多了一个周期,是因为要访问cache。
LAD指令操作流程:
打开IR(指令寄存器)输出三态门,将直接地址打入到DBUS总线。
将数据打入到AR(数据地址寄存器)中去。
找到数存直接地址(6)对应的那个寄存器,将里面的数(100)放入到DBUS总线上。
打入到DR(数据缓冲寄存器)。
覆盖掉通用寄存器R1原有的数据。
结束。
STO指令操作流程:
打开IR输出三态门,将R3传送到DBUS上面
将R3打入到通用寄存器中,取出里面的数据
打开通用寄存器三态门,将数据打入到DBUS总线上
传入到AR,找到30对应的那个寄存器
打开IR输出三态门,将R2传送到DBUS上面
将R2打入到通用寄存器中,取出里面的数据
打开通用寄存器三态门,将数据打入到DBUS上
传入AR,将数据写入30对应寄存器中,原有的数据(40)被覆盖了
结束。