使用Spim

时间:2015-08-27 23:45:50

标签: assembly hex mips hexdump spim

所以我正在从一个在线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文件中。这段代码可以修复,还是有人可以建议另一种方法来提取文本段的那部分?

2 个答案:

答案 0 :(得分:0)

如果您使用qtSpim模拟器(我认为它只使用Python,因此安装相对简单),那么您不需要任何额外的转换步骤。 qtSpim应该无需投诉地阅读所有说明和伪指令。你可以得到它here

答案 1 :(得分:0)

作为参考,我刚遇到这个问题,并利用WebMIPSASM将汇编代码转换为十六进制。删除MIPS汇编代码顶部的指令,它将产生十六进制输出。

将此输出保存到名称为“ .x”的文件中,模拟器将运行。