MIPS程序集文件写入

MIPS程序集文件写入,mips,smips,Mips,Smips,我试图在MIPS汇编中写入文件,但似乎无法使其正常工作。代码很简单,但是无论我键入什么,$v0寄存器都返回-1。我尝试过其他人的代码,但最终还是得到了相同的结果 守则: filename: .asciiz "file.txt" buffer: .asciiz "hello textual world" .text open_file: li $v0, 13 # open file la $a0, filename # file name li $a1,

我试图在MIPS汇编中写入文件,但似乎无法使其正常工作。代码很简单,但是无论我键入什么,
$v0
寄存器都返回
-1
。我尝试过其他人的代码,但最终还是得到了相同的结果

守则:

filename: .asciiz "file.txt"
buffer: .asciiz "hello textual world"

.text
open_file:
    li $v0, 13      # open file
    la $a0, filename    # file name
    li $a1, 1       # write flag
    li $a2, 0       # ignore mode
    syscall
    jal print
write_to_file:  
    move $a0, $v0       # descriptor
    li $v0, 15      # write to file
    la $a1, buffer      # buffer
    li $a2, 20      # max chars to write
    syscall
    jal print
close_file: 
    li $v0, 16      # close
#   move $a0, $v0       # descriptor
    syscall
    jal print

    li $v0, 10      # exit program
    syscall

print:
    move $a0, $v0
    li $v0, 1
    syscall         # print v0
    li $v0, 11
    li $a0, '\n'
    syscall         # print '\n'
    jr $ra
输出:

-1
-1
16

-- program is finished running --
火星方向图的一个缩影。注意:我知道dir包含“FILES.txt”而不是“file.txt”。但是,我正在尝试创建一个新文件

编辑:

过了一段时间,我运行程序并解决了这个问题。出于某种原因,我今天运行第一个系统调用时,它没有返回
-1
,但问题是在“jal print”中,
$v0
更改了它的值,这意味着它后面的一行,即write_to_file label的第一行,将不正确的描述符加载到
$a0
。另一个潜在的问题是,我把20个字符打印出来,而不是19个字符


长话短说,我已将文件描述符保存在
$s0
中,并输入19个字符以供编写,现在程序可以运行。

您当前的用户是否有权在该目录中创建文件?是的。更让人困惑的是,我在上面的例子出现之前已经设法让它工作了一段时间,并且它工作了。