2013-04-16 44 views
2

我想使用MIPS Syscall 13来简单地打开一个文件,以便我可以读取某些字符串并将它们打印到控制台,但是当我打开该文件时文件描述符保持返回-1。我已经检查过文件扩展名,所有内容似乎都是按顺序排列的。在与源代码相同的目录中有一个名称为“cards.dat”的文件。这是我的代码。如果任何人都可以帮助,这将不胜感激。MIPS文件打开

.data 
filename: .asciiz "cards.dat" #file name 
textSpace: .space 1050  #space to store strings to be read 

.text 
main: 

li $v0, 13   #open a file 
li $a1, 0   # file flag (read) 
la $a0, filename   # load file name 
add $a2, $zero, $zero # file mode (unused) 
syscall 
move $a0, $v0  # load file descriptor 
li $v0, 14   #read from file 
la $a1, textSpace  # allocate space for the bytes loaded 
li $a2, 1050   # number of bytes to be read 
syscall 
la $a0, textSpace  # address of string to be printed 
li $v0, 4   # print string 
syscall 

回答

1

当您使用相对路径时,您必须确保工作目录是您期望的工作目录。也就是说,cards.dat需要位于程序的工作目录中。代码看起来不错。如果您知道要打开的文件的确切位置,请尝试在filename中使用绝对路径。

如:

filename: .asciiz "c:\\files\\cards.dat" #file name 

你可以实验,以获得工作目录的另一件事是你的代码中创建一个文件,然后看看哪里该文件被创建文件系统......为此,使用服务13与$a1设置为1(写入标志)。

此外,不要忘记在使用服务16后关闭文件句柄。这是您绝对应该做的最佳实践之一。

+0

这解决了我的问题。谢谢 ! 注意双'\\'。 – PlayHardGoPro

1

如果您要给MIPS一个文件名,就像您在代码中一样。 MIPS .jar必须与文件位于同一目录中;不是你的源代码。