From Nand To Tetris 从与非门到俄罗斯方块

22、P1 W4 U4.1 机器语言 纵览(待完善)

2019-08-08  本文已影响0人  shazizm

视频:
如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
P1W4U4.1 - Machine Languages-Overview

经过前三周的学习,事实上本周已经可以进行Hack小电脑的最后组装工作了。

不过这被挪到第五周进行了。

在这之前,本周(第四周),先来从使用电脑的角度来看看Hack小电脑的一些内部细节,运行机制和内部结构。然后第五周再去组装完成它。

现在的手机和电脑,我们已经习惯了它们是什么都能干的设备。

不过回溯历史,在通用计算机流行之前,大部分所谓的计算机设备其实都是专用的。比如(待完善)

通用图灵机(universal Turing machine,又称Machine U)是图灵机的一种,由艾伦·图灵在1936年(理论上)提出的一种抽象计算机模型,图灵机模型有很多种,而通用图灵机模型可以模拟大部分其它种的图灵机模型。

其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器。


阿兰·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日)

20世纪30年代中期(1936?)。

德国科学家冯诺依曼大胆的提出,抛弃十进制,采用二进制作为数字计算机的数制基础。

同时,他还说预先编制计算程序,然后由计算机来按照人们事前制定的计算顺序来执行数值计算工作(这就引入了要存储程序的需求)。

冯·诺依曼和EDVAC计算机,EDVAC开始是十进制,且没有存储。后经过冯·诺依曼重新设计,于是就有了冯·诺依曼架构,课程的Hack小电脑是哈佛架构,不是常见经典的冯·诺依曼架构

再回溯之前老师提供的Hack小电脑示意图,下图

存储示意区分了 “程序存储区域” 和 “数据存储区域”,后面课还会见到“屏幕映射区”,和“键盘映射区”

存储器(Memory),上周学习的,每个16位寄存器对应一个地址(Address)。

例如图中 示意 Address157地址里放的就是16位 01011110011(好像不到16位,示意图,理解就好)。

程序(在程序存储区域)会按地址顺序一步一步执行,执行的时候,就是把上面的 Address 157 里的 0101xxx 送入 CPU里执行。

如果有计算结果,下部分还会有数据(data)再存储回数据存储区域。

那些个在存储器的程序区域的010111110011组成的一行行的代码,就是所谓的机器语言。

上图涉及了三个基本的概念,本周之后课程会讲到。

第一:指令如何被执行。
第二:如何控制指令执行顺序。
第三:指令能操作啥。

先大概说下机器语言。

机器语言(一行行的0101xxx),人类变态的情况下可以这么编程序,但是相当繁琐和困难也容易出错,于是就发明了一种相对高级的语言(例如:汇编语言 (Assembly Language)),当然同时也得准备好对应这个高级语言的编译器(Compiler)(例如:对应 汇编语言 的编译器叫 汇编器(Assembler))。

这样人类就能更容易的编写程序了,然后执行的时候,就把人类的高级语言,通过那个对应的 编译器(compiler)翻译成 机器语言。

第六周课程会实现 具体实现 Hack小电脑的 汇编语言 和 汇编器

貌似我们可以跳过机器语言了,皆大欢喜,但是课程设计不允许,因为我们得自己弄出个编译器。所以我们不能不会机器语言的运行原理。(这正是本课程的特色,什么都得自己做出来,很好很喜欢)

下图 简单对比一个 “机器语言” 和 “汇编语言” 的例子(不用记,示意)。

左边的机器语言:0101xxx。
右边的汇编语言:ADD 1,Mem[129]。

129是一种表示存储器的索引值,就像门牌号,Mem[129]大概就可以理解成 第129号寄存器。


后面会讲他俩的对应关系

这节课大概纵览了一下 通用计算机 的 机器语言 一些主要概念。

下节还是继续 介绍 机器语言 主要概念的具体细节。

之后才是如何实现Hack小电脑的 机器语言 和 汇编语言 以及编译器。

上一篇下一篇

猜你喜欢

热点阅读