1.1计算机工作过程(超详细)
@
一、计算机组成框图
为了方便大家对计算机工作过程的理解,在这里我又总结了详细的教程。
先来看一下计算机每个部分的功能:



二、思维导图
这里将计算机部件的各个概念,做了一个思维导图。
大家可以照着记忆,还是非常全面的。

三、部件剖析
(1)存储器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vlFBdkzT-1673444517410)(D:\Typora图片\image-20230111201356932.png)]](https://img-blog.csdnimg.cn/29e6f4fc02d24f0bb010ffa6f118a23e.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DEFxzv8-1673444517411)(D:\Typora图片\image-20230111201419345.png)]](https://img-blog.csdnimg.cn/1ddb8bec8ff8467db0401477caccd52b.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IK7Ubj2o-1673444517412)(D:\Typora图片\image-20230111201448154.png)]](https://img-blog.csdnimg.cn/580ed1bb75fa4767b7c028f7b27c3578.png)
注意“字”和“字节”的区别。
还有“B”和"b"的区别。
(2)运算器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5jpbS8mK-1673444517412)(D:\Typora图片\image-20230111201553213.png)]](https://img-blog.csdnimg.cn/186bc63c4d434d04932a1a79816307fa.png)
(3)控制器

四、案例剖析(重点)
我们来分析一下这几行代码,在计算机中如何运作的。
int a=2,b=3,c=1,y=0;
y=a*b+c;
右侧是存储器内存图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOzu9xf9-1673444517413)(D:\Typora图片\image-20230111201920761.png)]](https://img-blog.csdnimg.cn/3aa14225c83b4cd1a8e3fd0cf0922e7e.png)
(1)a=2
首先是取值。
来看一下详细的运转过程。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k2wfhh0d-1673444517414)(D:\Typora图片\image-20230111202201695.png)]](https://img-blog.csdnimg.cn/0c5181b956a84c22b92230561915e52e.png)
有几个需要注意的点:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TwjQfRqZ-1673444517415)(D:\Typora图片\image-20230111202356843.png)]](https://img-blog.csdnimg.cn/6fa12498837a4882b859b1b50e278d3c.png)
(2)a*b
a的值已经被送到ACC寄存器里面了。
所以现在的乘法指令的地址码(0000000110)指向的是另一个乘数b的存放位置。
通过地址码(0000000110-->6)可以看到,取出的数是:0000000000000011,转为十进制就是3。
接下来b的值3会通过数据总线,送到MQ(乘商寄存器)。(图中第9步)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PtRMuSXb-1673444517415)(D:\Typora图片\image-20230111202525737.png)]](https://img-blog.csdnimg.cn/d9308cff087844e2bfdea1ffac89e298.png)
现在b的值已经放入MQ里面。
我们还需要将a的值从ACC里面拿出来,放在X寄存器里面。(CPU进行乘法操作的时候,会把被乘数a放在X寄存器,把乘数b放在MQ乘商寄存器里面)
接下来,CU会通过控制线,告诉ALU,让它进行乘法运算。
ALU就会把X和MQ寄存器里面存储的数相乘,最终的结果放入ACC。
所以ACC现在得到a*b的值,即6。
如下图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-entZ7u66-1673444517416)(D:\Typora图片\image-20230111204922227.png)]](https://img-blog.csdnimg.cn/6fd05959b7a7451abdc483a37365b0e0.png)
如果相乘的数特别大,ACC寄存器存不下,这时候就需要MQ寄存器辅助存储,MQ里面存放乘法运算结果的低位。
和前面那一条指令(a=2)相比,第一步到第五步是相同的。
只有当控制单元分析出这一条指令是乘法指令的时候,接下来的操作才会有区别。
(3)a*b+c
上一个步骤取指令之后,PC自动加一。
所以,现在的PC指向了2:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4aT1y89-1673444517416)(D:\Typora图片\image-20230111203049718.png)]](https://img-blog.csdnimg.cn/144c4645e4b84e29aab536178a9b589e.png)
ACC寄存器里面存放了a*b的值,即6。
前面五个步骤是一样的,通过前五个步骤,可以完成取指令和分析指令。
现在,CU会分析的指令操作码是000011,对应是加法操作。
接下来,CU会根据加法指令的执行步骤来指挥其他部件协调工作。
这次要计算的是a*b+c,而a*b的结果已经在ACC中了。所以这个加法指令的地址码指明的是c变量的存放地址。
IR将地址码部分(0000000111-->7)传给了MAR,MAR再传给存储体。
存储体通过这个地址找到对应的值,即:0000000000000001-->1。然后将这个值送给MDR。
现在MDR里面存的就是c的值1。
然后MDR将c的值送入X寄存器里面。(加法运算的时候,ACC里面事先存了被加数,即a*b;X寄存器会存放加数,即c)
接下来控制单元会向ALU发送一个信号,告诉他此次要执行加法操作。
然后ALU就会把ACC和X寄存器里面存放的值加在一起,并且将加的结果放入ACC里面。
这样下来,最终ACC存入的结果是7(a*b+c)。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdFgAlnS-1673444517417)(D:\Typora图片\image-20230111203036342.png)]](https://img-blog.csdnimg.cn/2be46ec68ca84861ba5bfa082a0096e4.png)
(4)y=a*b+c
接下来要将a*b+c的值存入y中。
之前进行的a=2这些操作,都是取值操作。
现在要做的,是要把a*b+c的值存入y中,是存值操作。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vbVcwUWj-1673444517418)(D:\Typora图片\image-20230111210855560.png)]](https://img-blog.csdnimg.cn/5fea5ff2c73a4344a32ad64d7f886b45.png)
❓存值操作是如何进行的呢?
经过上面的分析,知道现在这一条指令是存数指令,也就是将ACC里面的值(7)存入地址码(0000001000-->8)所指明的存储单元中的位置。
8这个存储单元,刚好对应的是y变量的存储位置。
具体步骤:
①IR将地址码部分(0000001000)送入MAR,用来指明此次需要存入哪一个存储单元。(图中第6步)
②还要将ACC里面的值通过数据总线,送入MDR里面。(图中第7步)
此时MDR里面保存了a*b+c的值。
MAR里面的地址指明,这个值需要存入内存地址为8的地方。
③CU告诉存储器,此时要进行的是存入(写)操作。
主存储器会根据MAR所指明的地址,把MDR里面的数据,放到相应的位置。
所以,8号存储单元的值变为了7。
如图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8P1cKx8-1673444517418)(D:\Typora图片\image-20230111211730141.png)]](https://img-blog.csdnimg.cn/ad24fed0214b4cc8b2bf98998548da39.png)
(5)停机
上面的取指令之后,PC的值还是会加一,指向下一个内存单元的地址。
此时,PC=4了。
首先还是要取出指令,PC将4号位置的地址送入存储器,存储器再将指令送入IR,IR再将操作码部分(000110)送入CU。
CU经过分析,发现这是一条停机指令。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCqxM4Ql-1673444517419)(D:\Typora图片\image-20230111212346373.png)]](https://img-blog.csdnimg.cn/d78a1ff6e250428186ff6d5f930473c0.png)
这时候,程序运行结束了。
要停止一个进程的运行,就要通过系统调用来通知操作系统终止这个进程,接下来就是操作系统要进行的相关指令了。
这里不做探讨。
五、总结
计算机的工作过程:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g6Ttta5L-1673444517419)(D:\Typora图片\image-20230111212452856.png)]](https://img-blog.csdnimg.cn/5b58c48d6f48440882aab66e460ec723.png)
任何一个指令的执行,都是这三个阶段:取指令、分析指令和执行指令。
无论执行的是什么指令,前面五个步骤(取指令和分析指令)都是一样的,只有分析完指令之后,CU才可以知道这条指令到底要做什么。接下来的步骤,对于不同的指令就有可能不一样。
“取指令”阶段,MDR里面的数据是要传送到IR寄存器的。
而在“执行指令”的阶段,CU会根据具体执行的指令来决定MDR里面的数据是放入ACC还是放入MQ或者其他寄存器里面。
根据指令执行周期的不同,CPU就可以区分出这次从内存中取出的到底是指令还是数据。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMvy7Pgs-1673444517420)(D:\Typora图片\image-20230111213016106.png)]](https://img-blog.csdnimg.cn/af123b8f33814a80911cc0cfe6de226b.png)
现代计算机通常把MAR、MDR也集成到CPU里面。
这次的案例,每一条指令只给出了一个操作码和一个地址码。有的计算机给出的指令,可能有多个地址码。
比如一条指令包含两条地址,这种指令就被称为二地址指令。
存储程序:在程序运行之前,指令和数据都会被提前存到主存里面。
参考:王道视频
整理文章内容不容易,多多支持。


浙公网安备 33010602011771号