我正在尝试使用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

===============>>#1 票数:3

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

===============>>#2 票数:2

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

例如:

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

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

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

  ask by maxbart translate from so

未解决问题?本站智能推荐: