1

私はMARSプログラムを使用してMIPSアセンブリコードを記述しています。記述しているプログラムは、入力ファイルを取り込んでから、それを反復処理していくつかの数値を変更する必要があります。コードの本文はすべて記述していますが、実際にファイルを取り込む方法がわかりません。入力を読み込んでアドレスを保存する次のコードがあります。

.data 0x0
magicNum:       .asciiz "P2"  #magic number
zero:   .word 0
newLine:        .asciiz "\n"  #new line character

.text 0x3000

main:
        ori $v0, $0, 8          #8 is syscall to read string
        ori $a0, $0, 100        #stores address of input buffer
        ori $a1, $0, 3          #max character to read in
        syscall

#the rest of the code is down here

しかし、実際にファイルをWindowsのどこに置いて、ファイルを取り込むのでしょうか。

4

1 に答える 1

2

syscall 13を使用してファイルを開き、次にsyscall 14を使用してファイルから読み取り、その内容をバッファーに格納する必要があります。

開始するためのスニペットを次に示します。コードでギャップを埋めるだけです。

.data
filename: .asciiz "file.txt"
buffer: .space 1024

.text

    la $a0, filename
    li $a1, 0       # readonly
    li $a2, 0
    li $v0, 13
    syscall         # open file
    bltz $v0, file_error
    move $a0, $v0    
    la $a1, buffer
    li $a2, 1024
read_file:
    li $v0, 14
    syscall
    beqz $v0, read_done
    bltz $v0, read_error
    addu $a1, $a1, $v0   # adjust buffer pointer
    subu $a2, $a2, $v0
    bnez $a2, read_file   # If buffer not full and not EOF, continue reading
read_done:
   # File copied to buffer
   # Your code goes here

file_error:
   # Code to take action if file errors occur (e.g. file not found)

read_error: 
   # Code to take action if read errors occur

MARSを使用している場合、ファイルは現在のディレクトリ(MARSを開始した場所)にある必要があります。

于 2012-11-30T13:23:12.900 に答える