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

2

相対パスを使用しているため、作業ディレクトリが期待どおりのものであることを確認する必要があります。つまりcards.dat、プログラムの作業ディレクトリにある必要があります。コードは問題ないようです。filename開きたいファイルの正確な場所がわかっている場合は、絶対パスを使用してみてください。

例えば:

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

作業ディレクトリを取得するために試すことができるもう 1 つのことは、コード内にファイルを作成し、そのファイルが作成されるファイルシステムを調べることです...そのためには、サービス 13$a1を 1 (書き込みフラグ) に設定して使用します。

また、サービス 16 を使用した後は、ファイル ハンドルを閉じることを忘れないでください。これは、必ず実行する必要があるベスト プラクティスの 1 つです。

于 2013-04-16T14:21:15.293 に答える