摘自 《计算机系统要素:从零开始构建现代计算机》
1. 语法规约和文件格式
文件名称:习惯上,二进制及其代码表示的程序和汇编代码的程序被存储在后缀分别为“hack”和"asm"的文本文件中,因此,Prog.asm文件会被汇编编译器翻译成Prog.hack文件。
二进制代码(.hack)文件
二进制代码文件由文本行组成。每一行由16个0/1组成的ASCII码构成一个序列,该序列对一个单一的16-位机器语言指令进行编码。因此,文件中的所有行在整体上代表一个机器语言程序。当机器语言程序被加载进计算机的指令内存中时,文件的第n行二进制码被存放到地址为n的指令内存单元中。
汇编语言(.asm)文件
汇编语言文件由文本行组成,每一行代表一条指令或者一个符号声明:
-
指令:A指令或C指令
-
符号:该伪指令将Symbol绑定到该程序中下一条命令的地址上。因为它并不产生机器代码,所以称之为“伪命令”。
常数和符号 常数必须是非负的,用十进制表示。用户定义的符号可以是由字母、数字、下划线、点、美元符号和冒号组成的字符序列,但是不能以数字开头。
注释 以两条斜线(//)开头的文本行被认为是一条注释,注释不会被计算机执行。
空格 空格字符和空行被忽略
大小写习惯 所有的汇编助记符必须大写。剩余部分是区分大小写的。一般的习惯是,标签大学,变量名称小写。
2. 指令
要将三个域comp,dest,jump翻译成各自对应的二进制编码,可以参看下面的三个表。
3. 符号
Hack汇编命令通过使用常数或符号来指定内存单元。汇编程序中的符号来源于三个方面。
预定义符号
任何Hack程序允许使用下面的预定于符号。
注意到表中的RAM地址0到6可以使用两个预定义符号来指代。比如说R2或者ARG都可以用来指定RAM[2].
标签符号
伪命令定义符号来指代存有程序中下一条命令在指令内存中得位置。每个标签只能被定义一次,可以在程序中的任何地方使用,甚至可以在它自身被定义的那一行之前使用。
变量符号
任何出现在汇编程序中得符号Xxx,如果它不是预定衣服好也没有在其他地方使用Xxx命令,那么它就被当做变量。每当程序遇到一个新的变量时,就把它连续地映射到从16开始的内存中去。
阅读(2965) | 评论(0) | 转发(0) |