2013-04-16 6 views
2

J'essaie d'utiliser MIPS Syscall 13 pour ouvrir simplement un fichier afin que je puisse lire certaines chaînes et les imprimer sur la console, mais le descripteur de fichier continue à afficher -1 lorsque j'ouvre le fichier. J'ai vérifié les extensions de fichier et tout semble être en ordre. Il y a un fichier de nom "cards.dat" dans le même répertoire que le code source. Voici mon code. Si quelqu'un pouvait aider, ce serait apprécié.Ouverture du fichier 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 

Répondre

1

Vous devez vous assurer que le répertoire de travail est celui que vous attendez, lorsque vous utilisez des chemins relatifs. Autrement dit, cards.dat doit être dans le répertoire de travail de votre programme. Le code semble très bien. Essayez d'utiliser un chemin absolu dans filename si vous connaissez l'emplacement exact du fichier que vous souhaitez ouvrir.

Par exemple:

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

Une autre chose que vous pouvez essayer d'obtenir le répertoire de travail est de créer un fichier dans votre code, puis regarder dans le système de fichiers où le fichier est créé ... Pour cela, le service d'utilisation 13 avec $a1 défini sur 1 (indicateur d'écriture). De plus, n'oubliez pas d'utiliser le service 16 pour fermer la poignée de fichier après l'avoir utilisée. C'est l'une de ces meilleures pratiques que vous devriez absolument faire.

+0

Cela a résolu mon problème. Merci ! Faites attention au double '\\'. – PlayHardGoPro

1

Si vous attribuez à MIPS un nom de fichier comme celui que vous avez dans votre code. Le MIPS .jar doit être dans le même répertoire que le fichier; pas votre code source.