从MIPS上的.csv文件读取数据

从MIPS上的.csv文件读取数据,csv,assembly,mips,file-read,atoi,Csv,Assembly,Mips,File Read,Atoi,我必须开发一个项目,其中我必须从.csv文件中读取数据,如下所示: 10,12.1 15,25.6 15,25.1 ... 所以我试着阅读如下: .data file: .asciiz "/home/gilson/Documents/test.csv" .word 0 buffer: .space 4 .text main: #open file li $v0, 13 la $a0, file add $a1, $zero, $zer

我必须开发一个项目,其中我必须从.csv文件中读取数据,如下所示:

10,12.1
15,25.6
15,25.1
...
所以我试着阅读如下:

.data 
    file: .asciiz "/home/gilson/Documents/test.csv" 
    .word 0
    buffer: .space 4
.text
main:
    #open file
    li $v0, 13
    la $a0, file
    add $a1, $zero, $zero
    add $a2, $zero, $zero
    syscall
    add $s0, $v0, $zero
    #read 4 bytes from file
    li $v0, 14
    add $a0, $s0, $zero
    la $a1, buffer
    li $a2, 4
    syscall
    #print
    li $v0, 1
    lw $a0, buffer
    syscall

done: 
    li $v0, 16
    add $a0, $s0, $zero
    syscall

exit:
    li $v0, 10
    syscall

我得到了以下结果:

824979505
-- program is finished running --
因此,我将print syscall更改为print string,输出为:

...
li $v0, 4
la $a0, buffer
syscall
...

正如我所看到的,他正在读取文件中的字符,而不是数字格式。我想知道是否有直接读取数字的方法,或者我是否必须使用一些程序将字符转换为int?

从文件中读取的数字将采用文本格式。您需要将它们从文本转换为数字。

从文件中读取的数字将采用文本格式。您需要将它们从文本转换为数字。

不是字符转换为int,而是ascii转换为二进制“10”=0x31、0x30,您需要去掉0x3x部分并进行转换。((0x31&0xF)*10)+(0x30&0xF),但前提是您知道这些是十进制数,而不是其他基数(八进制、十六进制、二进制)。如果这是纯十进制数,那么如果new&0xF0=0x30,那么累加器*=10累加器+=new&0xF;else(逗号)保存累加器,将累加器归零,循环返回以获取下一个字符,else(换行符或回车符)处理该字符。您是在学习汇编还是在学习算法,还是两者都在学习?理想情况下,使用您擅长的某种语言对其进行原型化,然后在调试后将其移植到asm。将算法问题与语言问题分开解决。分而治之。我正在学习汇编,谢谢你的提示,这正是我所怀疑的,如果它必须被转换,现在我已经实现了一个转换过程,它起了作用。了解电子表格可以生成更复杂的csv文件,但可以通过实验来处理(试着在一个字段中加上双引号和逗号,然后导出,看看你得到了什么)。刚才注意到你有小数位是故意的还是这个问题中的一个输入错误,如果这是浮点而不仅仅是整数,那么你需要处理与同一个循环相似但不精确的内容。它不是char到int,而是ascii到二进制的“10”=0x31,0x30,您需要去掉0x3x部分并进行转换。((0x31&0xF)*10)+(0x30&0xF)但这假设您知道这些是十进制数,而不是其他基数(八进制、十六进制、二进制)。如果这是纯十进制数,那么如果new&0xF0=0x30,则累加器*=10累加器+=new&0xF;否则(它是逗号)保存累加器,将累加器归零,循环返回以获取下一个字符,否则(换行符或回车符)处理这个问题。你是在学习汇编还是在学习算法,或者两者兼而有之?理想情况下,用你擅长的某种语言制作原型,然后在调试后将其移植到asm。将算法问题与语言问题分开解决。分而治之。我在学习汇编,谢谢你的提示,这就是我所怀疑的,如果它有问题的话e要转换,现在我已经实现了一个转换过程,并且成功了。要知道电子表格可以生成更复杂的csv文件,但要通过实验来处理(尝试在字段中添加双引号和逗号,然后导出,看看结果如何).刚才注意到你有小数点是故意的还是在这个问题上有错,如果这是浮点而不仅仅是整数,那么你需要处理与同一个循环相似但不精确的问题。
10,1