在 QtSpim 中始终打开文件 returns“-1”

Opening file always returns "-1" in QtSpim

我正在做一个大学项目,我们必须通过 MIPS 将数据写入文件。我在 MARS 上将所有内容都发送到 运行,但在 QtSpim 上,打开文件总是 returns 错误:

.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 中 运行 逐步执行此操作时,我在 syscall 之后的 $v0 中得到一个 -1。 任何想法,为什么 QtSpim 不能 运行 这个?我在 Windows 10,QtSpim 版本 9.1.17,尽管 LinuxMint 18 上的相同版本也有同样的问题。感谢任何帮助,现在我将 运行 MARS 上的所有内容,但我们必须提交在 QtSpim 上工作的东西。


更新

当我使用绝对路径时它似乎工作,但文件必须存在才能以写入模式打开它。如果文件不存在,有没有办法创建文件?

QtSpim 中的相对路径基于执行它的目录,该目录可能与您的代码或图像的位置不同。

好吧,经过大量的反复试验,当我打开标志为 0x41 和模式为 0x1FF 的文件时,它似乎可以工作。

如果我没理解错的话,0x41 是用 create 写的,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 在以管理员身份启动时甚至不能写入它自己的目录,所以实际上只有绝对路径有效。