gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:48:36 30 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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())并将其作为整数存储在数组中。

关于arrays - MIPS:将整数数据从文件存储到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649761/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com