【问题标题】:MIPS: Store integer data into array from fileMIPS:将整数数据从文件存储到数组中
【发布时间】:2012-03-10 20:08:14
【问题描述】:

我正在为一个问题编写此代码,我必须从文件中读取整数并将它们存储到数组中以执行其他操作。到目前为止,我已经能够从文件中读取并将它们存储到缓冲区中。

#### 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

我被困在了必须将缓冲区中的这些整数存储到数组中的地方。这是怎么做到的?

【问题讨论】:

    标签: arrays file io mips


    【解决方案1】:

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

    1234 523 54326 7131
    

    (可以换行,概念一样)

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

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

    要将字符串解析为整数,您可以借鉴 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
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      相关资源
      最近更新 更多