簡體   English   中英

使用 Spim 將 MIPS asm 轉換為十六進制

[英]Converting MIPS asm to hexadecimal using 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 文件中。 這段代碼可以修復嗎,或者有人可以建議另一種方法來提取文本段的那部分嗎?

如果您使用 qtSpim 模擬器(我相信它只使用 Python,因此安裝起來應該相對簡單),那么您不需要任何額外的轉換步驟。 qtSpim 應該毫無怨言地閱讀所有說明和偽說明。 你可以在這里得到

作為參考,我剛遇到這個問題,並利用WebMIPSASM將匯編代碼轉換為十六進制。 刪除 MIPS 匯編代碼頂部的指令,它應該產生十六進制輸出。

將此輸出保存到名稱為“.x”的文件中,模擬器將運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM