文章目录
- 计算机的前世今生
- 计算机的三个根本性基础
- 1. 计算机是执行输入、运算、输出的机器;
- 2.程序是指令和数据的集合;
- 3.计算机的处理方式有时与人们的思维习惯不同
- 二、结论
- 三、参考资料
- 交个朋友
计算机的前世今生
上一篇文章最终结束的时候谈到希望给大家带来有体系结构的计算机原理的知识,最近翻阅了一些书籍总感觉大家介绍CPU大体上都是按照CPU的组成部分挨个突破,但是又总感觉少了连接的部分,比如DMA这个技术叫直接存储器访问,我们会意识到就是IO与内存之间直接进行数据交换呗,如果直接学习这个概念博主当时没有特别深刻的理解,如果在学DMA之前我们学习CPU是怎么制作的,比如CPU通过读取汇编指令去实现内存与外设之间的数据交换,在这个基础上我们会不会更好的理解DMA呢?
第一篇文章就介绍CPU的诞生,理解一下CPU怎么来的?
计算机的三个根本性基础
理解一个事物的最好方法就是了解它的原则,什么东西只要找到根子了,就好说了,原则就是根子,理解原则在此基础上我们一点一点的构建一台计算机,这样也可以感觉到计算机的神奇!
计算机的三大原则:
1. 计算机是执行输入、运算、输出的机器;
计算机可以做各种各样的事情,比如:打游戏啦,处理文字啦,绘图啦,浏览网页啦,无论多么复杂的功能,都是以输入、运算、输出这个流程为单位的组合,输入必须有,没有输入计算机又不会自主思考,无法给出输出,运算必须有,没有运算这就是一根导线啊!相当于verilog中的wire a; wire b; assign b = a;这就是直接连线没有任何逻辑的参与,输出也是必要的啊!没有输出咱们用这个计算机也没有任何的意义啦!所有信息就都堆在计算机中了,我们又不能拿来用!从这个角度看自动炒菜机、自动糖葫芦机也符合计算机原则的第一点啊,更宏观的我们与学校结合在一起也可以看成计算机啊,我们是输入,学校有自己的培养流程,最终我们从学校毕业成为了不同的输出!
我们就是最智能的计算机,我们每天通过感官接触海量的信息,经过大脑的思考以后,输出成不同的内容,或者说出来,或者表现在行动上,或者以文章形式记录下来!只有这样我们才可以将自己处理的信息传递给外界!
2.程序是指令和数据的集合;
指令和数据这里涉及到以下几个问题!
1、指令和数据都是二进制数,指令与数据是针对于哪个视角区分的?
指令和数据这两个概念是针对CPU视角阐述的,内存并不区分指令与数据,指令与数据在内存眼里都是二进制数值,正常内存的结构如下:
正常存储器包括三部分:地址总线、数据总线、读写使能,内存就是给地址,例如给一个读使能,内存就吐出数据,给一个写使能,内存就在相应位置写入数据,内存不在意这个数据是什么,就是一个存数读数,有一个前提条件,这个数据必须是二进制的数据,内存就是一个没有感情的杀手;就好像在我们东北万物皆可冰糖,比如冰糖葫芦,冰糖辣条,冰糖辣椒,不管冰糖啥,反正熬糖浆,包糖,最后冷冻都是这个流程,这就像是内存,就是走这个流程,并不关心走流程的对象是谁!;
指令和数据是针对CPU视角说的,CPU可以从时间和空间上区分指令与数据,CPU之所以区分指令和数据,是因为CPU不能对指令和数据一视同仁,需要对指令与数据进行不同的操作!还是糖葫芦那个例子,冰糖不在乎它包裹了谁,但是咱们在乎啊,吃山楂腹泻的吃冰糖葫芦,那肯定是不行的,可以吃冰糖橘子,冰糖葡萄,就是因为冰糖的对象不同会引发身体不同的感受和反应!下一个问题就是CPU既然区分指令和数据,那它是怎么区分的,区分的依据是什么呢?
2、指令和数据都是二进制数,如何区分指令与数据?
CPU可以从时间和空间上区分数据与指令:
时间上:
在时间上,在取指周期取出的是指令,正常三级流水线的CPU包括三个阶段:取指、译码、执行,在取指周期,CPU会将PC指针的数值作为地址去内存中取出所谓的“指令”,指令经过译码处理以后到达执行阶段,执行周期从内存取出或者往内存中写入的是数据,例如:RISC-V中的数据传输指令lb rd,offset(rs1),从地址为寄存器rs1的值加offset的主存中读一个字节,这个在取指的时候从内存中取出的就是这个数据传输指令,指令经过译码处理以后,进行执行阶段,执行寄存器rs1数值与offset的相加操作得到内存地址,内存地址线得到这个地址,吐出所谓的“数据”。
空间上:
在空间上CPU是如何区分指令和数据的呢?
通过地址来源区分,由PC提供存储单元地址的取出的是指令,指令地址码部分提供存储单元地址的取出的是操作数;
以RISC-V的LW指令为例:
LW(load word)指令格LW rd,offset(rs1) ;
x[rd] = sext ( M [x[rs1] + sext(offset) ] [31:0] )
举个
LW x13,4(x12)
在x12寄存器中的数加上4的偏移量对应的内存地址中,读出四个字节,存到x13寄存器中,其中4(x12)就是LW指令的指令地址码部分,从地址码部分提供的存储单元中取出的就是数据;
以8086CPU为例,如上图所示,8086中有4个段寄存器:CS、DS、ES、SS,8086CPU中指令地址是由CS和IP共同提供的,CS提供段地址,IP提供偏移地址,用它们合成指令的物理地址,去内存中取指令;摘抄王爽老师的汇编语言中的一段话:
如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过!!!
8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址;
3.计算机的处理方式有时与人们的思维习惯不同
对计算机什么说什么都是数字!例如我们理解的红色就是一个色彩,但是计算机可能就用"255,0"表示红色;
不论是颜色,还是文字,计算机都是用数字进行表示;
例如:这张图片我们看到的是天空中有一轮明月,计算机看到的就是一串串数字;
举个例子:Perl脚本中$美元符号就是一个标识符,这个符号的意思就是后面所跟的是一个变量,好比C语言中的int,这就是因为Perl解释器看到美元符号就会把它后面跟的字符当成变量处理,看见C语言中的int则当成普通字符处理,这就是因为Perl解释器和C语言编译器对一个事物的理解不同,当然这种理解是我们人类赋予的!
二、结论
之前说了介绍有体系的计算机原理的文章,这一节介绍了计算机的三大根本性基础,包括以下3点:第1点是计算机是输入、运算、输出的机器,这就好像房子包括房梁、墙、门窗等构成,第2点是程序是由指令和数据组成的,程序是计算机运行的内容,好比房子的用途,比如幼儿园是小孩上学的,菜市场是买菜的地方,第3点是计算机的处理方式与人的思维习惯不同,就好像房子在地产商看来就是钢筋水泥,在我们看来那就是家!
三、参考资料
1.计算机如何区分指令和数据
2.王爽老师:汇编语言
3.计算机是怎样跑起来的