我正在尝试写入 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 个要写入的字符,现在程序可以运行了。