第六章:汇编编译器

目标:开发汇编编译器,将Hack汇编语言编写成的程序翻译成Hach硬件平台能够理解的二进制代码。


分析:本章的本质就是文本处理,将给定的.asm文本根据给定的规则映射为.hack二进制文件。

我们先分析.asm文件,一行可以是一下几种情况:

1)指令:又分为A-指令,C-指令。

2)常数和符号:常数还好解决,用户自定义的符号,还得为其分配内存。

3)注释:以"//"开头的被认为是注释,忽略。

4)空行:忽略。


书中为了降低难度先要求实现一个无符号版的,这也是一种很好的思维方法,将复杂的问题,转换为简单的已知的问题。

书中也给出了模块的API,既然是文本处理,语言自然就是python啦。


实现

Paser模块:

<span style="font-size:12px;">def hasMoreCommand(line):	
	if not line:
		return 0
	return 1

def advance(fl):			#return next line 
	line = fl.readline()
	return line

def clear(line):
	index = line.find('//')
	if index > 0:	#remove the gloss
		line = line[0:index]
	return line.strip('\n ') 		#remove the blank then return

def commandType(line):
	if line.find('(') > -1:
		return 'L_COMMAND'
	elif line.find('@') > -1:
		return 'A_COMMAND'
	else:
		return 'C_COMMAND'

def symbol(line):
	line = line.strip(' ()@\n')
	return line

def dest(line):
	if line.find(";") > 0:		#deal with the jump command
		return 'null'
	index = line.find('=')
	return line[0:index].strip()

def comp(line):
	index = line.find(';')
	if index > 0:
		return line[0:index].strip()
	idx = line.find('
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《orange's个操作系统的实现》是一本关于操作系统实现的书籍,其中第六章无法运行可能有以下几个原因。 首先,书中的代码可能存在错误。编写代码时,一些细节的失误可能导致程序无法正确运行。这可能是作者在编写书籍时出现的问题,或者是影响到第六章的代码遗漏或错误。在实际操作中,我们应该检查在书中提供的代码并尝试找到错误。 第二,缺少必要的软件或工具。在开发操作系统时,通常需要使用一些特定的软件和工具,例如汇编器、编译器、链接器等。如果这些软件或工具没有正确安装或配置,可能会导致第六章中的代码无法运行。 第三,硬件环境不符合要求。在实际操作系统的开发中,硬件环境的要求可能较高。如果硬件配置不符合第六章中所述的要求,例如内存容量过低或者缺少某些关键的硬件设备,那么无法保证代码能够正确运行。 最后,操作系统开发环境的设置可能有问题。正确设置开发环境是操作系统开发的关键。如果遗漏了某些设置步骤,例如环境变量的配置或者文件路径的设置等,那么第六章的代码可能无法正常运行。 针对以上可能的原因,我们可以先检查书中代码的正确性,然后逐步检查所需软件和工具的安装与配置,以及硬件环境是否符合要求。如果仍然无法解决问题,我们可以尝试在相关的开发社区或论坛上寻求帮助,与其他开发者交流并寻找解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值