2012-03-10 45 views
2

私はファイルから整数を読み込み、他の操作を実行するために配列に格納する必要があるという問題のためにこのコードを書いています。これまで私はファイルから読み込み、バッファに格納することができました。MIPS:整数データをファイルから配列に格納する

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

これを行うと、ファイルの内容が別の行に表示され、別の行に表示されます。

li $v0, 4   # syscall for printing a string 
la $a0, buffer   # load read data in $a0 
syscall 

この時点で、これらの整数をバッファに格納して配列に格納する必要があります。これはどうですか?あなたは私はあなたのファイルは次のようになりますと仮定されます上に行くために私たちに多くの情報を与えていない

答えて

4

1234 523 54326 7131 

(それはラインで区切らすることができ、考え方は同じです)

数字を文字列に読み込んだら、数値を解析して整数にする必要があります。それを整数配列に格納します。あなたの配列は次のようになります。

 .align 2 # word-aligned 
array: .space 40 # a word array of 10 elements 

は、あなたがこのような何かに見えるatoi関数を持つC、()からのコンセプトバローできる整数に文字列を解析するには:

# 
# int atoi (const char *str); 
# 
# Parse the cstring str into an integral value 
# 
atoi: 
    or  $v0, $zero, $zero # num = 0 
    or  $t1, $zero, $zero # isNegative = false 
    lb  $t0, 0($a0) 
    bne  $t0, '+', .isp  # consume a positive symbol 
    addi $a0, $a0, 1 
.isp: 
    lb  $t0, 0($a0) 
    bne  $t0, '-', .num 
    addi $t1, $zero, 1  # isNegative = true 
    addi $a0, $a0, 1 
.num: 
    lb  $t0, 0($a0) 
    slti $t2, $t0, 58  # *str <= '9' 
    slti $t3, $t0, '0'  # *str < '0' 
    beq  $t2, $zero, .done 
    bne  $t3, $zero, .done 
    sll  $t2, $v0, 1 
    sll  $v0, $v0, 3 
    add  $v0, $v0, $t2  # num *= 10, using: num = (num << 3) + (num << 1) 
    addi $t0, $t0, -48 
    add  $v0, $v0, $t0  # num += (*str - '0') 
    addi $a0, $a0, 1   # ++num 
    j .num 
.done: 
    beq  $t1, $zero, .out # if (isNegative) num = -num 
    sub  $v0, $zero, $v0 
.out: 
    jr  $ra   # return 

を(ジャストC atoi()関数のように、エラーチェックの仕組みがないので、追加することもできます)。

ファイルから個々の番号を(atoi()に渡して)解析し、整数として配列に格納します。

+0

ありがとうございました。 :) – Amjad

関連する問題