因此,我正在在线 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 中显示的文本段中找到的十六进制代码存储到 .x 文件中。可以修复此代码吗?或者有人可以建议一种替代方法来提取文本段的该部分吗?
WebMIPSASM 将汇编代码转换为十六进制。删除 MIPS 汇编代码顶部的指令,它应该生成十六进制输出。
将此输出保存到名称为“.x”的文件中,模拟器将运行。