4

mips命令を使用してファイルにアクセスしようとしています。
一度にすべてのファイルを読み取るのではなく、ファイルを 1 行ずつ読み取りたいので、このコード (1) は機能しません。

また、上書きではなくファイルに書き込みたいです!
誰でも私を助けることができますか?

コード:

書き込み用にファイルを開く

li   $v0, 13       # system call for open file
la   $a0, file      # board file name
li   $a1, 0        # Open for reading
li   $a2, 0
syscall            # open a file (file descriptor returned in $v0)
move $s6, $v0      # save the file descriptor 

ファイルから読み取る

li   $v0, 14       # system call for read from file  
move $a0, $s6      # file descriptor   
la   $a1, buffer   # address of buffer to which to read  
li   $a2, 40     # hardcoded buffer length  
syscall            # read from file  

ファイルを閉じる

li   $v0, 16       # system call for close file  
move $a0, $s6      # file descriptor to close  
syscall            # close file  
4

2 に答える 2

1

一度にすべてのファイルを読み取るのではなく、ファイルを 1 行ずつ読み取りたいので、このコード (1) は機能しません。

データのチャンクをバッファに読み込みます (例: 数キロバイト)。次に、そのバッファーを行ごとに処理し (改行文字を探して)、バッファーの最後に達したときにファイルからさらにデータを読み取ります。

また、上書きではなくファイルに書き込みたいです!

$a1ファイルを開くときに、フラグ ( ) を 9 に設定します (syscall 13)。これは、「作成および追加を伴う書き込み専用」に対応します (この MARS システムコール リファレンスを参照してください)。

于 2013-05-20T11:45:00.927 に答える
0

それはたくさんの仕事です:)

.data  
fin: .asciiz "file.txt"      # filename for input
buffer: .space 128
buffer1: .asciiz "\n"
val : .space 128
.text

################################################ fileRead:

# Open file for reading

li   $v0, 13       # system call for open file
la   $a0, fin      # input file name
li   $a1, 0        # flag for reading
li   $a2, 0        # mode is ignored
syscall            # open a file 
move $s0, $v0      # save the file descriptor 

# reading from file just opened

li   $v0, 14       # system call for reading from file
move $a0, $s0      # file descriptor 
la   $a1, buffer   # address of buffer from which to read
li   $a2,  6  # hardcoded buffer length
syscall            # read from file

li  $v0, 4          # 
la  $a0, buffer     # buffer contains the values
syscall             # print int

lb $t1 , buffer

# reading from file just opened

li   $v0, 14       # system call for reading from file
move $a0, $s0      # file descriptor 
la   $a1, buffer   # address of buffer from which to read
li   $a2,  6  # hardcoded buffer length
syscall            # read from file

li  $v0, 4          # 
la  $a0, buffer     # buffer contains the values
syscall             # print int

## sh  $t5 , val($0)    #sw    $t5, theArray($t0)

# Close the file 

li   $v0, 16       # system call for close file
move $a0, $s6      # file descriptor to close
syscall            # close file
于 2013-05-22T18:15:37.130 に答える