计算机内部的工作

下面以CPU执行三个数的加法时,其具体过程的逐步分析。

假设一个CPU有名字为A,B,C,D的寄存器。这个CPU有8位数据总线和16位地址总线。因此,这个CPU能够访问地址为0000-FFFFH(总共10000H个地址)的存储器,CPU完成的动作是将16位进制数21放入寄存器A,然后将42H和12H累加到寄存器A。假设CPU传送一个值到寄存器A的指令的编码是1011 0000(B0H),将一个值累加到寄存器A的指令编码是0000 0100(04H),那么所需要的步骤和对应编码如下所示:

动作                                编码         数据

将值21H放入寄存器A          B0H        21H

将值42H累加到寄存器A       04H        42H

将值12H累加到寄存器A       04H        21H

如果执行上面所列动作的程序存储在起始地址为1400H的存储器中,那么下面列出的是每个存储器地址中的内容:

存储器地址                                          地址中所存放的内容

   1400                                    (B0)将一个值传送到寄存器A的指令编码

   1401                                    (21)传送的值

   1402                                    (04)累加到寄存器A的指令编码

   1403                                    (42)被累加的值

   1404                                    (04)累加到寄存器A的指令编码

   1405                                    (12)被累加的值

   1406                                    (F4)停机指令编码

CPU执行上述程序所要完成的动作如下所示:

1. CPU程序计数器的取值位于0000~FFFFH之间,程序计数器初始值要设置为1400H,表示第一条要执行的指令地址,在指令计数器被加载了第一条指令的地址之后,CPU便处于就绪状态。

2. CPU在地址总线上放置1400H,并将这个值传送出去,当CPU激活read洗脑,向存储器表示它需要地址位1400H处的字节数据时,存储器电路就找到所需地址,这使得1400H的存储器内容B0被放置到数据总线上,然后存入CPU。

3. 求助于译码词典,CPU对指令B0进行译码,当CPU在词典中找到该指令的定义时,它必须将下一个存储器字节的内容装入CPU的寄存器A,当它取得存储器地址1401的值21H时,它会确保除寄存器A之外的所有寄存器的门是关闭的,因此,当值21H调入CPU中时,这个值将直接进入寄存器A。这条指令完成后,程序计数器指向下一条要执行的指令的地址,即1402H,地址1402倍发出并放在地址总线之上,为取得下一条指令做准备。

4. 从存储器的1402H处取出代码04H,经过译码之后,CPU知道它应该将1403的内容累加到寄存器A之中,在取得值(42H)之后,它将寄存器A的内容连同这个值一起提供给ALU,以执行加法运算。然后,它从ALU的输出端取出加法的结果,并将此结果放入寄存器A之中,同时,程序计数器的值变为1404,即下一条指令的地址。

5. 地址1404放到地址总线上,指令的编码取出之后放入CPU之中,接下去译码并执行,这个指令编码所完成的功能,同样是将一个值累加到寄存器A中,程序计数器的值变为1406H。

6. 最后,1406H之处的内容被取出并执行,这个停机指令告诉CPU:停止对程序计数器的增量和取得下一条指令的操作。如果没有HALT指令,CPU会继续更新程序计数器并取指令。

posted @ 2015-05-09 21:06  枫旸一生  阅读(278)  评论(0编辑  收藏  举报