1.5 详解上章工作过程
-
首先 我们 a b c y 这些数据 都会被 存储在
主存的存储体
中。 -
PC
指向 第一条指令的存储地址。 -
PC
又通过 地址总线 传递给MAR
,然后控制器
通过控制单元
发送信号
告诉 主存储器 你要执行 读操作,而非写操作。 -
接收到 读操作的主存储器,会 根据 MAR 存储的地址,到 存储体里 找到 对应的 二进制代码,然后 放到 MDR 里。
-
由于这次我们取到的二进制代码,是一个指令。如果是一个指令,那么就会 被 存储到
IR
里面。然后再把这串二进制代码的操作码
传递给CU
控制单元,让CU
去分析 这个操作码,再去 决定执行什么操作。
由于 000001 是 取数的操作。所以 要把 IR 里面 存储的 地址码部分里面内容 取出来。并且 还要 让 MDR 里面的数据 存放到 ACC里。
-
如果要取数据,那么肯定要通过
存储体
来进行读取。所以IR
就会把 地址码部分 传递到MAR
里面,然后 再通过CPU 控制器
发送 读取的信号给 主存储器,然后 通过MAR
里面的 地址码,我们可以 取出 a 的 数据,放在MDR
里面。 -
然后
MDR
还要通过 数据总线 传递到ACC
寄存器里面。(当我们 只是进行 取值的操作时,可能默认 就会 存储到 ACC 寄存器里。) -
PC
会自动加1,然后来到 下一条指令。然后 取出指令的地址,再 把指令 放到IR
里,然后通过CU
进行分析。发现我们要 做 乘法运算。 -
我们会通过 类似于上述的一系列操作,把 b 取出来 送到
MQ
寄存器里。 -
然后由于我们要 进行 运算,所以我们会把
ACC
里面的值 暂且放在X通用寄存器
里面。(即被乘数 放到 X 里,乘数 放到 MQ 里面) -
CU
会发送信号,告诉ALU
,利用 MQ 和 X 里面的数据,进行 乘法运算。 最后把 结果 再次 放到ACC
寄存器里。 如果乘积结果 过大,则需要 MQ 寄存器 进行辅助存储。(会存储 结果的 二进制低位部分。) -
PC+1
来到 第三条指令,发现 要 进行 取 c 的操作,所以MAR
要 去存储 该指令 的地址。然后MDR
取出指令的二进制代码,让CU
进行 判断,再把 地址码 返回给MAR
然后 取出 c 的值。由于ACC
现在 存储的结果是 上一个 乘积的结果 "6". 所以 c 的值 只能 存储到x 通用寄存器
当中的一个寄存器
里了。 -
然后
CU
把 加法的信号发送给ALU
,让ALU
通过ACC
和X
的数据,进行加法运算
。再把 结果 返回给ACC 寄存器
。 -
PC+1
执行 下一条指令,该指令 是 为了让ACC
里面的数据 存储到 存储体里面。 -
所以
CU
会告诉 主存储器 我要进行 写入操作。然后把 地址码 传递给MAR
,ACC
里面的数据 给 MDR,即可 进行 写入操作。这样子ACC
的最终结果 "7" 也就被存储到了 主存储器当中。即 内存当中。 -
PC+1
,根据CU
分析 发现 我们 要调用停机指令
,而停机是 要利用 中断机制通知操作系统终止该进程的。