指令执行
写在开头,以下内容均来自王道视频
CPU内部单总线结构
【图1】 CPU内部结构图(注意,图中的总线为CPU内部总线)
注:
MemR
:内存读信号;MenW
:内存写信号;IR
:指令寄存器;PC
:程序计数器;MAR
:地址寄存器;MDR
:数据寄存器; R 0 . . . R n − 1 R_0 ... R_{n-1} R0...Rn−1:通用寄存器;Y
:(输入)暂存器;ALU
:算术逻辑单元;Z
:(输出)暂存器;MDRinE
:从外部的数据总线输入到MDR的数据是否有效;MDRoutE
:从MDR输送到外部数据总线的数据是否有效;MDRin
:从CPU内存总线中输入数据至MDR;MDRout
:从MDR输出数据到CPU内部总线;其他类似的,寄存器AX的输入输出分别由AXout和AXin控制;
现分析指令:ADD (R0) , R1 的指令流程与控制信号
首先分析该指令实现的功能:实现加法,将 源 操 作 数 源操作数 源操作数与 目 的 操 作 数 目的操作数 目的操作数相加,然后将结果返回至目的操作数的寄存器中;
一般的:有指令:ADD R0 , R1 翻译成汇编指令为:(R0)+(R1)->R0
其中
R
0
R0
R0表示目的操作数 ,
R
1
R1
R1表示源操作数,加括号表示表示
寄
存
器
间
接
寻
址
寄存器间接寻址
寄存器间接寻址 如(R0)即表示根据R0寄存器中存放的所需操作数的内存地址信息然后去内存中寻找该操作数,同理(R1);而R0则表示直接放入R0这个寄存器中。因此这段指令翻译成人话就是:根据R0与R1寄存器中的地址信息去内存中取出相应操作数然后相加放入R1寄存器中。
回到这道题上来,该指令翻译成汇编语句便是:((R0)) + (R1) -> (R0)
取指周期:公共周期
【图2】
间址周期:完成取数操作,被加数在主存中,加数已经放在寄存器R1中。
执行周期:完成取数操作,被加数在主存中,加数已经放在寄存器R1中。