我正在尝试写入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 --
火星目录的Screenshot。注意:我知道该目录包含“ FILES.txt”而不是“ file.txt”。但是,我正在尝试创建一个新文件。
编辑:
一段时间后,我运行了程序并解决了问题。由于某种原因,我今天运行它时,第一个系统调用没有返回-1
,但是问题是在{jal print“中,$v0
更改了它的值,这意味着它后面的行, write_to_file标签的第一行将错误的描述符加载到$a0
。另一个潜在的问题是我要打印20个字符而不是19个字符。
长话短说,我已经将文件描述符保存在$s0
中,并写入了19个字符,现在程序可以正常工作了。