写这个东西主要还是为了复习,在学习计算机系统基础这门课时,由于找不到对应的网课,只能看书硬啃了,所以把获得的少的可怜的知识总结一下放在这里,既是方便复习(还有两周就要考试了),也希望能帮助到其他为这门课程头疼的同学,因为水平有限,可能会有疏漏或者错误的地方,希望有大佬看见了能指正了(救救孩子,孩子不想挂科啊!)
这篇学习总结看的教材是袁春风老师的《计算机系统基础第二版》,按照章节顺序总结的知识点和考点,行了,废话不多说,直接开始吧。
我在之前学习过C语言,其实也好奇过计算机是如何看懂我们输入的程序并进行运行的(只是模模糊糊地知道计算机内部的二进制存储模式),这本书的第一章就为我们大致地讲解了这个问题。
首先是从冯 诺依曼对于计算机的思想开始的,冯 诺依曼对于计算机的基本思想是
1.“存储程序”,这个玩意的想法就是将事先准备好的程序和数据送到主存后,计算机能在不需要人工干预下自当完成取出指令和执行的任务(这部分是按照我自己的理解写下来的,标准的定义请看课本)。
2.计算机由运算器、存储器、控制器、输入设备、输出设备五个基本部分组成(这玩意学C语言的时候应该已经背熟了)。
3.存储器不仅能存储数据,还要能存储指令,且形式上指令和数据没有区别(确实这样,在计算机内部都是二进制),且计算机能够区别他们。(后面还有一点,什么控制器能够执行指令,运算器能够进行算术逻辑运算,操作人员能够通过输入和输出设备使用计算机,都是人话,很好理解)
4.计算机内部通过二进制形式表示指令和数据,且每条指令由操作码和地址码组成(这个部分第一章末尾会详细讲,操作码表示操作类型,地址码指出操作数的地址,你只有知道你要去哪(地址码)干什么事(操作码)生活才有意义)。
好的,既然思想有了,我们就要实干了,所以下面是关于冯诺依曼机的基本结构
这个部分想必是学这门课最劝退的时候了(我上课的第一天,打开书就是这玩意,什么MDR,MAR,ALU......对于大学前完全没摸过电脑的我来说伤害实在太大了,不过慢慢看总能看懂得)
一个一个来,
1.MDR(memory data register)看到了吗,data,memory,说明这玩意是一个存数据的东西,而且还是个寄存器
2.MAR(memory address register)这个就不用多说了,address,存储数据地址的一个寄存器
3.PC(program counter)高中英语有点基础大概都知道counter是计数器的意思,这玩意有什么用呢,程序计数器嘛,就是在你做完一个程序之后,这玩意会进行一个+1的操作,然后控制器就会把下一条指令拉出来运行。
4.ALU(A不写了,麻烦,知道L是logic(逻辑)就行)所以这玩意就是我们说的逻辑运算部件,处理数据和逻辑运算的(包括加减乘除还有取合等等),我们所有的指令其实都可以转化成这些基础的数据和逻辑运算,最后就传到这里进行处理(要是还想进一步了解硬件上怎么处理的,不妨去玩玩图灵完备(turing complete))。
5.IR(instruction register)如你所见也是一个寄存器,叫指令寄存器(还记得指令包括操作码和地址码吗)前面的OP(不是原批doge)就指的是操作码,描述操作类型的(后面会详细讲),后面的addr(address别告诉我你不认识)就指的是地址
6..还有GPRs和主存感觉没必要讲力,这部分还是比较简单的
这时候有人就要问了,怎么搞这么多寄存器出来,前面不是已经有寄存器了吗,还要GPRS干嘛,当然是有用的,程序在执行过程中多多少少会产生一些中间数据,这些数据利用GPRS进行传输
好的,上面挖了一个大坑还没有填,就是关于指令的问题,指令到底在计算机内部是怎么存储和运用的,答案就在下面
一个远古课件中的图
我们说过指令可以分成OP和addr两个部分,第一部分的OP表示操作类型
比如说R型指令中0000表示的就是传送(mov),0001表示的就是加(add)
而在M型指令中1110表示的是取数(load),1111表示存数(store)
至于怎么分成R型和M型的,可能是操作对象的不同吧
而这些OP到底怎么记,我认为是不需要记的,但是要有能写出每条指令执行过程的能力
比如指令z=x+y
写出来长这个样
OK啦,1.1的部分到这里就结束了。以后每天都会写一点吧,就当做是复习了,如果有大佬发现错误和可以补充的地方,麻烦评论区提醒一下,我会去改进的。