0

我正在尝试写入 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 --

Mars 目录的屏幕截图。注意:我知道目录包含“FILES.txt”而不是“file.txt”。但是,我正在尝试创建一个新文件。

编辑:

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

长话短说,我已经保存了文件描述符$s0并放入了 19 个要写入的字符,现在程序可以运行了。

4

0 回答 0