所以我正在从一个在线CMU课程中完成这项任务,我正在编写一个指令级MIPS模拟器。有几个以asm格式给出的输入文件,必须将其转换为十六进制格式才能被模拟器读取。提供了一个asm2hex Python程序,它使用spim将asm转换为十六进制,但它似乎不起作用。 spim' -vasm'有一个未知的参数,并且程序在运行时实际上并没有输出任何文件。 asm2hex.py在这里:
#!/usr/bin/python
import os, argparse, subprocess
# parse arguments
parser = argparse.ArgumentParser()
parser.add_argument("fasm", metavar="input.s", help="the MIPS assembly file (ASCII)")
args = parser.parse_args()
fasm = args.fasm
fhex = os.path.splitext(args.fasm)[0] + ".x"
# run SPIM (the actual MIPS assembler)
SPIM = "/afs/ece/class/ece447/bin/spim447"
cmd = [SPIM, "-notrap", "-vasm", fasm, fhex]
subprocess.call(cmd)
# SPIM outputs many files; but we are interested in only one
cmd = ["mv", fhex + ".text.dat", fhex]
subprocess.call(cmd)
# remove unnecessary two lines from the file
lines = open(fhex).readlines()
lines = map(lambda x: x.lstrip(), lines)
data = str.join('', lines[2:])
data = str.join('\n', data.split())
open(fhex, 'w').write(data)
# remove all other files
cmd = ["rm", fhex + ".*.dat"]
cmd = str.join(' ', cmd)
subprocess.call(cmd, shell=True) # we need a shell to expand the wildcard
程序基本上将xspim中显示的文本段中的hexa代码存储到.x文件中。这段代码可以修复,还是有人可以建议另一种方法来提取文本段的那部分?
答案 0 :(得分:0)
如果您使用qtSpim模拟器(我认为它只使用Python,因此安装相对简单),那么您不需要任何额外的转换步骤。 qtSpim应该无需投诉地阅读所有说明和伪指令。你可以得到它here
答案 1 :(得分:0)
作为参考,我刚遇到这个问题,并利用WebMIPSASM将汇编代码转换为十六进制。删除MIPS汇编代码顶部的指令,它将产生十六进制输出。
将此输出保存到名称为“ .x”的文件中,模拟器将运行。