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

25、P1 W4 U4.4 HACK的机器语言

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

视频:
如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
P1W4U4.4 - Hack Language Specification

到目前为止,课程讲了

Hack 硬件架构
(ROM存程序,CPU处理指令,RAM存数据)

汇编语言
(A指令,C指令)

机器语言
(这节讲)

回顾

符号(汇编语言)
通过 汇编器(assember) 翻译(tranlate)成
二进制(机器语言),然后CPU去 执行(execute)

汇编器在第六周讲。

这里老师貌似把 符号(汇编语言) 和 二进制(机器语言)都说成Hack机器语言。无所谓了

A-指令,上节课讲了,value可以是一个正的十进制数,这个数不能超过32767。也可以是一个符号,指向一个正的十进制数。

A-指令 同样可以用 一个 16位的二进制表示。如下规定:
最左边一位为0,代表A-指令。其它15位代表数值(2^15-1 = 32767)

例如

@21 指令,二进制表示就是:如下图右下角
0 000 000 000 010 101
也就是机器语言。

A-指令 的二进制表示

C-指令上节课也讲述了它的使用,其中dest、comp、jump分别对应16位里如下图的位置。

最左边一位为1,代表C-指令,然后依次往右两位没用到,但是惯例设成1。
然后7位 蓝色0011111 代表 comp (决定选择哪些寄存器,参与什么运算)
然后3位 红色010 代表 dest(决定结果存在哪里)
最后3位 绿色111 代表 jump(决定运算结果与0进行那种判断,跳转位置需提前存在A寄存器)

C-指令 的二进制表示

具体的 comp、dest、jump 对照表,如下图

comp、dest、jump 对照表

那么 Hack的程序 一般就是下图的样子。

一行行的指令
空行是可以的
//是注释(//后面写什么都不影响前面的指令)
最好不要直接用数值,可以设变量。(后面会讲)

Hack典型的程序样例

最后,我们写好的汇编语言,经过汇编器,翻译成0101xxx之后,加载到CPU就能执行了。

直观对比

这几讲完了Hack小电脑用到的两种语言的转换方式。
下节课,讲解如何 用Hack的语言 来 访问 输入输出设备。

上一篇下一篇

猜你喜欢

热点阅读