启动计算机时,所有的寄存器都是0.
在RAM中放了一个程序(ADDRESS,DATA),现在就是要过一遍运行这个程序的过程
该阶段负责拿到指令,即指令地址寄存器读取RAM中对应地址的值复制到指令寄存器
1.首先将指令地址寄存器连接到RAM中(ADDRESS INPUT),寄存器的初始值为0,因此会去读取RAM中ADDRESS为0的DATA
2.DATA会被复制到指令寄存器中,现在指令寄存器存储了00101110这个指令
现在我们拿到了指令,前四位是操作码对应的是指令表中的LOAD A指令。对应的描述是将RAM的值放入寄存器A
后四位1110是RAM的内存地址,转成十进制就是14.
指令通过”控制单元“进行解码。解码的作用就是判断这个操作码对应的操作是什么(通过少量的逻辑门即可判断)
针对不同的操作码有对应的指令判断电路从而执行不同的操作。例如下面这个就是检查操作码是不是LOADA(0010)指令。
指令寄存器拿到数据DATA后通过控制单元进行解码,现在我们知道了这个是LOADA指令,就可以进行执行阶段了
1.打开RAM允许读取线:我们将检查LOADA指令的电路连接到RAM的READ ENBALE中(如果LOADA输输出为1那么READN ENANLE也是1因此就会打开RAM的允许读取线),并把地址14传入过去。
2.读取RAM 对应地址的值:RAM拿到地址14上的值,0000 0001也就是十进制的三
3.RAM DATA线连接所有的寄存器:LOAD_A指令代表这个值存储在A寄存器中并不影响其他寄存器。因此需要将RAM读出来的值给到寄存器,所以RAM的DATA数据线需要将所有的寄存器都连接起来(DATA线既可以用来做输入又可以用来做输出使用)。
4.打开指定寄存器的允许输入线:用检查“是否为LOADA指令的电路”打开寄存器A的允许写入线(因为是LOADA指令,所以需要将A寄存器的允许写入打开),这样就将RAM中地址为14的值输出保存到了寄存器A中。
5.取下一条指令指令地址寄存器+1:执行阶段结束。开始下一个取指令阶段(读取0001的RAM地址到指令寄存器中,然后在解码执行........之后一直重复这个过程)
上面解释的只是一个LOADA指令,不同的指令由不同的逻辑电路解码,这些逻辑电路会配置CPU内的组件来执行对应操作。这些逻辑电路太复杂我们可以把整个逻辑电路封装为上面所说的控制单元。
也就是下图中的线路。可以看到控制单元链接了所有的寄存器(用于存放和读取数字),和RAM链接的是允许读取和允许输入线(READ ENABLE WRITE ENABLE),还有一条线是ADDRESS INPUT ,这条线是用来告知使用的是16个地址空间中的哪个地址(比如之前的14)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。