【问题标题】:Opening file always returns "-1" in QtSpim在 QtSpim 中打开文件总是返回“-1”
【发布时间】:2016-12-18 13:54:11
【问题描述】:

我正在从事一个大学项目,我们必须通过 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 中逐步运行它时,我在 $v0 中的 syscall 之后得到一个 -1。 任何想法,为什么 QtSpim 不能运行它?我使用的是 Windows 10,QtSpim 版本 9.1.17,虽然 LinuxMint 18 上的相同版本有同样的问题。任何帮助表示赞赏,现在我将在 MARS 上运行所有内容,但我们必须提交一些适用于 QtSpim 的东西。


更新

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

【问题讨论】:

  • 是的,我知道我必须关闭文件等,我只是复制了与这个问题相关的代码。

标签: mips mips32 qtspim


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    好吧,经过大量试验和错误,当我打开带有标志 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 在以管理员身份启动时甚至不能写入它自己的目录,所以实际上只有绝对路径有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2016-11-21
      • 2019-10-10
      • 2014-04-13
      • 2017-03-20
      • 2013-11-04
      相关资源
      最近更新 更多