MIPS:将整数数据从文件存储到数组中

Amj*_*jad 2 arrays io file 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
Run Code Online (Sandbox Code Playgroud)

当我这样做时:它成功地显示文件的内容,这些内容在单独的行上是整数。

li $v0, 4           # syscall for printing a string
la $a0, buffer          # load read data in $a0
syscall
Run Code Online (Sandbox Code Playgroud)

我被困在这一点上,我必须将缓冲区中的这些整数存储到一个数组中。这是怎么做的?

Wiz*_*Wiz 5

你没有给我们提供很多信息,所以我假设你的文件看起来像这样:

1234 523 54326 7131
Run Code Online (Sandbox Code Playgroud)

(可以是line-delimited,概念是一样的)

将数字读入字符串后,必须将其解析为整数。然后将其存储在整数数组中。您的数组应如下所示:

        .align 2    # word-aligned
array:  .space 40    # a word array of 10 elements
Run Code Online (Sandbox Code Playgroud)

要将字符串解析为整数,您可以从 C 中提取概念,它具有 atoi(),看起来像这样:

#
#  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
Run Code Online (Sandbox Code Playgroud)

(就像 C 的 atoi() 函数一样,它没有错误检查机制,您可能需要添加它)。

解析文件中的每个数字(通过将其传递给 atoi())并将其作为整数存储在数组中。