所以我在一个在线CMU课程上做这个作业,在那里我正在写一个指令级MIPS模拟器。有几个以asm格式给出的输入文件,它们必须转换为十六进制格式才能被模拟器读取。提供了一个spim程序,该程序使用asm2hex将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文件中。这段代码可以修复吗,或者有人可以提出一种替代方法来提取文本段的那部分内容?
发布于 2015-08-31 23:37:34
如果你使用qtSpim模拟器(我相信它只使用Python语言,所以它的安装应该相对简单),那么你不需要任何额外的转换步骤。qtSpim应该无误地读取所有指令和伪指令。你可以在here上找到它
发布于 2020-12-16 08:52:34
作为参考,我刚刚遇到了这个问题,并利用WebMIPSASM将汇编代码转换为十六进制。删除MIPS汇编代码顶部的指令,它应该会产生十六进制输出。
将此输出保存到名为".x“的文件中,模拟器将运行。
https://stackoverflow.com/questions/32261176
复制相似问题