Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1320689
  • 博文数量: 179
  • 博客积分: 4141
  • 博客等级: 中将
  • 技术积分: 2083
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-21 20:04
文章存档

2024年(1)

2019年(13)

2016年(1)

2014年(16)

2011年(8)

2010年(25)

2009年(115)

分类: C/C++

2014-10-05 00:39:18

摘自 《计算机系统要素:从零开始构建现代计算机》

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) |
给主人留下些什么吧!~~