2013-04-16 85 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必須與文件位於同一目錄中;不是你的源代碼。