加法指令被取入IR中后,将自身的地址码从新送入MAR中,CU(控制器)发出读指令,内存将MAR中地址对应内容写入MDR中,返回给寄存器。
存术指令STA X,意味将寄存器内容存入指定X得地址对应存储单元。IR提供自身指令的操作数地址送入MAR,CU发出写命令,ACC写入MDR总,MDR再根据MAR中地址写入。
BAN指令,在执行周期中,要先查看ACC中上一条指令的运行结果的第一位(符号位)若为1(负)则将自己地址码送入PC作为下一条指令执行,如果为0,则保持原PC值迭代,自动执行下一条指令。
程序断点存入0地址,0要送入MAR中,随后CU向存储器发出写命令W,然后PC(程序断点)送入MDR,MDR根据CU送入MAR中的0地址存入程序断点,而后向量生成中断程序入口地址送入PC或者中断识别程序送PC开始生成中断程序入口地址并执行。最后关中断。(断点存入存储器)
(断点入栈方式只有第一步不一样)SP(栈顶)-1,然后送入MAR,即一会送入MDR中的数据(断点)要保存的位置(栈顶)
CU打开控制门C0,将PC中指令所在地址送入MAR,CU打开MAR到主存的控制门C1,同时向主存发出读命令,主存收到读命令后,通过C2控制门将指令送入MDR,MDR将ADD命令送入IR,同时将ADD命令中的一个操作数送入ACC寄存器中,然后IR将自己ADD的操作码送入CU进行解析。
上一周期取出的指令还在MDR中,MDR将指令的地址码送入MAR(C5由CU控制打开),CU打开C1,将ADD需要的另一个操作数地址送入主存,同时发出读命令,主存收到读命令后,将操作数返回到MDR中,MDR将操作数送入ALU中,CU打开C6、C7,ALU将两个数相加得到结果送入ACC寄存器中。
MDR将其中的ADD指令的地址码(形式地址)送入MAR中,然后CU发出读信号,主存将形式地址对应的真实地址送入MDR,MDR将真实地址同步到IR中ADD指令的地址码部分。
CU将IR对应通路(IRi)打开PC将要获取指令的地址送入CPU总线,送入MAR中,CU通过控制总线向主存发出读命令,主存将指令内容通过数据总线返回到MDR,CU打开MDR0通路,MDR将指令通过总线送入IR(指令寄存器),IR通过IR和CU间的通路将指令的操作码部分送入CU供其解析。
如果操作数是通过间址寻址方式获得的话,当指令被送入MDR之后,MDR中的指令的地址码部分是形式地址,MDR会通过MDR0打开后的通路接入总线,将形式地址传入MAR,MAR再通过地址总线将地址传入主存, CU发出读命令,然后主存将真实操作码地址返回MDR中,MDR将新的地址码同步到指令中,用于执行阶段对操作数的获取。
MDR将真实操作数地址通过CPU的内部总线(每次进入总线都需要CU打开相关门,以后都忽略)传入总线到达MAR中,MAR通过地址总线将地址传入主存,CU向主存发出读命令,主存收到读命令后,将数据通过数据总线返回到MDR中,MDR将数据通过总线传入Y中,随后CU(控制单元)发出ADD运算指令,AC、Y中操作数同时送入ALU中,运算结果保存在Z中,Z再通过总线传入ACC,ACC最终作为保存结果的位置。
如上图,一个指令周期包含多个机器周期,一个机器周期包含多个节拍。
每个机器周期包含的节拍数可以不同,也可以相同。
机器的主频f越快,机器的速度越快,前提是机器周期中所含的节拍(主频的倒数)数以及指令周期中所含有的机器周期数有关。
在上面条件下,平均指令执行速度之比,就是两台机器的主频之比。
每个节拍(微操作)都是由统一基准时标的信号控制。
无基准时标信号;无固定的周期节拍和严格的时钟同步;采用应答方式(“相互握手”)
同步和异步相结合。
RESET、连续和单条指令执行转换开关、符合停机开关。
上面C1到C12个控制指令、ALU右端的控制信号(控制ALU要作什么运算)、标志的修改(根据ALU的运算结果)、这些控制信号都在节拍的控制下由CU给出。
指令 | 微操作安排 |
---|---|
CLA(刷新寄存器,acc寄存器置0) | T0 无、 T1 无、T2 0 -> AC |
COM(ACC中每位取反) | T0 无、 T1 无、T2 AC取反 -> AC |
SHR(ACC右移一位) | T0 无、 T1 无、 T2 L(AC)-> R(AC) 右移操作 AC0 -> AC0 (保持符号位操作) |
CSL(循环位移) | T0 无、 T1 无、 T2 R(AC)-> L(AC) AC0 -> ACn |
STP(停机指令) | T0 无、 T1 无、 T2 0 -> G(停机触发器) |
ADD X (加数指令) |
T0 Ad(IR) -> MAR 1 -> R T1 M(MAR)存储器对应内容 -> MDR T2 AC和MDR中两个操作数相加。各种打开控制门操作等 |
STA X (将数据写入存储器) | T0 Ad(IR)-> MAR 1 -> w(读指令) T1 AC(要存入的数据) -> MDR T2 MDR -> M(内存) |
LDA X (将数据读出存储器) | T0 Ad(IR)-> MAR 1 -> R(读指令) T1 M存储器对应单元-> MDR T2 MDR -> ACC |
JMP X (无条件跳转指令) | T0 无、 T1 无、 T2 Ad(IR)-> PC (将跳转的地址送入PC即可) |
BAN X (条件分支指令) | T0 无、 T1 无、 T2 ( 根据条件判断将不同地址送入PC) A0*Ad(IR) + 0 * PC -> PC 这里实际是根据标志生成器的结果送入不同地址到PC,标志生成器会根据ACC中结果不同给出不同标志送入CU。这里是简化了表达。 |
状态标签是I,如果有多个状态标签,就可以进入多次间址周期。
硬件结构图及特点:
大概就是上面的设计方式,把每个节拍需要用到的控制信号都存入控制储存器,当第一个指令要取出时,就要先将PC的值送入微地址形成部件,经顺序逻辑选择后放入MAR,从控制存储器取出微指令,微指令包含两部分一部分是控制信号,取出后会直接跟相关控制信号发送给对应部件,另一部分对应下一个微指令的地址。
注:计算机组成原理的笔记均根据哈工大mooc资源整理。