我正在开展大学项目,我们必须通过MIPS将数据写入文件。我将所有内容都运行在 MARS 上,但在 QtSpim 上,只需打开文件就会返回错误:
.data
file_name: .asciiz "test.pgm"
#
# main
#
.text
.globl main
main:
# Open File in write mode
li $v0, 13 # $v0 = 13, option for opening file
la $a0, file_name # $a0 = &file_name
li $a1, 1 # $a1 = 1, write-flag
li $a2, 0 # $a2 = 0, mode is ignored
syscall # open File, save descriptor to $v0
jr $ra # return
当我在QtSpim中逐步运行时,我会在-1
之后的$v0
中获得syscall
。
任何想法,为什么 QtSpim 都无法运行?我在 Windows 10,QtSpim版本9.1.17 上,虽然 LinuxMint 18 上的相同版本存在同样的问题。任何帮助表示赞赏,目前我只是在MARS上运行所有内容,但我们必须提供适用于QtSpim的内容。
当我使用绝对路径时似乎工作,但文件必须存在才能在写入模式下打开它。如果文件不存在,有没有办法创建文件?
答案 0 :(得分:0)
QtSpim中的相对路径基于从中执行的目录,该目录可能与您的代码或图像的位置不同。
答案 1 :(得分:0)
好吧,经过大量的试验和错误后,当我用Flag 0x41和模式0x1FF打开文件时,它似乎有效。
如果我理解正确的话,0x41用于写入创建,0x1FF用于正确的权限。
main:
# Open File in write mode
li $v0, 13 # $v0 = 13, option for opening file
la $a0, file_name # $a0 = &file_name
li $a1, 0x41 # $a1 = 0x41, write-flag with create
li $a2, 0x1FF # $a2 = 0, permissions
syscall # open File, save descriptor to $v0
jr $ra # return
绝对路径,显然QtSpim在以管理员身份启动时甚至无法写入自己的目录,所以真的只有绝对路径才能工作。