打开文件总是返回" -1"在QtSpim中

时间:2016-12-18 13:54:11

标签: mips mips32 qtspim

我正在开展大学项目,我们必须通过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的内容。

更新

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

2 个答案:

答案 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在以管理员身份启动时甚至无法写入自己的目录,所以真的只有绝对路径才能工作。