计算机系统要素,从零开始构建现代计算机(nand2tetris)
如果完成了本书所有的项目 你将会获得以下成就
- 构建出一台计算机(在模拟器上运行)
- 实现一门语言和相应的语言标准库
- 实现一个简单的编译器
而且,这本书的门槛非常低,只要你能熟练运用一门编程语言即可。本课程综合了数字电路,计算机组成原理,计算机体系架构,操作系统,编译原理,数据结构等的主要内容,搭建了计算机平台的构建的框架,并未深入细节,如果需要了解细节,可由本书作为主线,逐步完善的知识体系。
本章重点内容
- 布尔运算
详细内容
在刚学C语言的时候,我一直很好奇,人类是怎样想出编程语言的?既然人类想出了编程语言,那么为什么编程语言会是现在的这个样子,比如指令为什么要那样设计?即便是人类能够将自然语言用0,1机器码来表示,机器语言的存在和人类将自然语言翻译成0,1机器码是一种巧合,还是具有一定的关系呢?这种机器语言是像牛顿定律一样先天存在呢,还是人类根据某些规则设计的呢?学完这一章,打开了我的疑惑。
我想这个过程应该是这样的:“对于机器而言,0,1机器码只不过是人类给的名字,机器码的本体是高低电压,在机器上加上电压可以使机器工作。这应该就是编程最初的模样,也就是给机器加电压使之工作。慢慢的人类设计出一种称为ALU的东西,利用一定的逻辑可以进行运算,这种逻辑就是布尔逻辑。当然,ALU需要输入很多电压,这些电压有的表示数据,有的表示计算函数。时序逻辑可以记录电路的前一个状态,在电路的输入端,我们可以设置两个输入接口,输入两个电压,一个表示是否保持电路的前一个状态,一个表示本次输入的电压(又可以称之为数据),当我们一直设置为保持前一个状态的时候,就实现了一个简单的存储元件。后来,为了方便计算,人类又将这些存储元件和ALU封装起来,形成一个称为CPU的东西。由于封装起来的这些元件都需要在输入接口输入电压才能进行工作,因此把这些内部逻辑封装起来,把输入接口和输出端口暴露出来,形成了芯片。在芯片的输入接口输入高低电平就可以使芯片完成一定的计算任务,在我看来,这就是很高级的编程了。也许在当时看来,这只不过是一种电气工作而且,但实际上这已经是编程了。后来根据不同输入接口的电平所起的作用,将他们划分为操作码和操作数。但它们本质上都是一股电压。并且输入接口的数量是由内部元件所需要的输入电压的个数而决定的,所以指令的长度是由芯片自身决定的,人类制定的规范只不过是为了起辅助性的作用。操作码和操作数构成了指令,然后为了方便,使用数字0,1来进行表示,总不能画一些电压的曲线去表示指令吧!就这样形成了机器语言,所以机器语言不是先天存在的,是人类为了方便使用机器而制定的,当然这也是依据了机器的工作原理,机器的设计原理等等。”
后来随着科技的发展,电子电路技术突飞猛进,机器语言弱点太明显了,人类便发明了汇编语言,是将机器语言符号化形成的汇编,这个出发点是机器语言,目的是为了方便使用,所以诞生了汇编语言,因此机器语言和汇编语言的直接本体都是高低电压,只不过在逻辑上一个是0,1数字,一个是符号,由此可见汇编语言不是凭空想出来的,是发展的结果,是劳动经验的总结,是劳动方法的改进。在我看了,这一步建立了符号和0,1机器码的映射,也就是完成了编码,就是所谓的将自然语言用0,1机器码表示出来,当然,其他的语言符号的编码规则没有这么简单。所以机器语言的存在和人类将自然语言翻译成0,1机器码并不是一种巧合,而是劳动方法的改进。汇编语言还有非常复杂,跟人类自然语言相差甚远,于是为了方便,基于汇编语言又开发出来了可读性更好的编程语言,如现在依然还在使用的C语言,而Java、Python等又是后来逐渐发展的结果。
由此可见,编程语言并不是人类突发奇想设计出来的,而是基于已有的电气工作给出的概念。编程语言之所以是现在这个样子,一方面取决于机器的工作原理和设计原理,另一方面受到了人类劳动的影响。机器的工作原理和设计原理决定了机器语言的格式,比如,根据不同的电压所起的作用的不同决定了一些电压是操作码,一些电压是操作数。人类劳动经验的总结和劳动方法的改进使得编程语言可读性更高、易使用性更强、门槛更低。
本文只是一篇学习总结,并不是一篇严谨的论文,也不是一篇科学知识的科普文章,文章只是为了通俗化,所以并没有使用很专业的术语,至于错误在所难免。
来源:CSDN
作者:Thingcor
链接:https://blog.csdn.net/qq_41634283/article/details/104221996