使用 Spim 将 MIPS asm 转换为十六进制

问题描述 投票:0回答:3

因此,我正在在线 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 文件中。可以修复此代码吗?或者有人可以建议一种替代方法来提取文本段的该部分吗?

assembly hex mips hexdump spim
3个回答
0
投票

如果您使用 qtSpim 模拟器(我相信它只使用 Python,因此安装应该相对简单),那么您不需要任何额外的转换步骤。 qtSpim 应该毫无怨言地阅读所有指令和伪指令。你可以在这里获取它


0
投票
仅供参考,我刚刚遇到了这个问题,并利用

WebMIPSASM 将汇编代码转换为十六进制。删除 MIPS 汇编代码顶部的指令,它应该生成十六进制输出。

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


0
投票
我也遇到了这个问题,最后解决了bug。流程如下:

  1. 安装QtSpim:

    https://spimsimulator.sourceforge.net/

  2. 修改*.s文件,使其只包含汇编代码格式,例如addiu.s应该是这样的:

    addiu $v0, $0, 10

    addiu $t0, $0, 5

    添加$t1,$t0,300

    addiu $t2,$0,500

    添加$t3,$t2,34

    添加$t3,$t3,45

    系统调用

  3. 将此 *.s 文件加载到 QtSpim,并复制这些十六进制转储代码,现在您已修复它。

© www.soinside.com 2019 - 2024. All rights reserved.