2

我正在尝试使用 MIPS Syscall 13 来简单地打开一个文件,以便我可以读取一些字符串并将它们打印到控制台,但是当我打开文件时文件描述符一直返回为 -1。我检查了文件扩展名,一切似乎都井井有条。在与源代码相同的目录中有一个名为“cards.dat”的文件。这是我的代码。如果有人可以提供帮助,将不胜感激。

.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
4

2 回答 2

3

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

于 2014-04-24T20:31:18.140 回答
2

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

例如:

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

您可以尝试获取工作目录的另一件事是在您的代码中创建一个文件,然后查看创建该文件的文件系统......为此,使用$a1设置为 1(写入标志)的服务 13。

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

于 2013-04-16T14:21:15.293 回答