如何从 MIPS 中的多行文本文件中读取整数
How to read integer from a text file on multiple lines in MIPS
我有一个文件文本,内容如下。我如何在 MIPS
中读取并将它们转换为整数
5
12 17 87 35 98
这是我读取文件的代码
.data
fileName: .asciiz "C:\Users\Admin\Desktop\input.txt"
newline : .asciiz "\n"
buffer: .space 1024
.text
.globl main
main:
# open file
li $v0,13
la $a0,fileName
li $a1,0
li $a2,0
syscall
move $s0,$v0
# read file
li $v0,14
move $a0,$s0
la $a1,buffer
li $a2,1024
syscall
# print buffer
li $v0,4
la $a0,buffer
syscall
作业,我想,所以没有完整的代码。
没有用于从文件中读取整数的内置系统调用。因此,您必须将其作为字符串读入数据缓冲区并将 ASCII 字符转换为整数。
算法是:
- 将最终数字初始化为零
- 从头到尾遍历一串数字
- 将当前数字字符转换为数字(减去0x30)
- 将最终数字的当前值乘以10,加上当前数字
- 移动到下一个字符,直到你碰到一个非数字
看看ASCII码table,看看数字的字符代码。对于第二步,使用其中一个寄存器作为指针:初始化为缓冲区的地址,使用 lb
从中读取当前数字,然后递增。
有帮助吗?
我有一个文件文本,内容如下。我如何在 MIPS
中读取并将它们转换为整数5
12 17 87 35 98
这是我读取文件的代码
.data
fileName: .asciiz "C:\Users\Admin\Desktop\input.txt"
newline : .asciiz "\n"
buffer: .space 1024
.text
.globl main
main:
# open file
li $v0,13
la $a0,fileName
li $a1,0
li $a2,0
syscall
move $s0,$v0
# read file
li $v0,14
move $a0,$s0
la $a1,buffer
li $a2,1024
syscall
# print buffer
li $v0,4
la $a0,buffer
syscall
作业,我想,所以没有完整的代码。
没有用于从文件中读取整数的内置系统调用。因此,您必须将其作为字符串读入数据缓冲区并将 ASCII 字符转换为整数。
算法是:
- 将最终数字初始化为零
- 从头到尾遍历一串数字
- 将当前数字字符转换为数字(减去0x30)
- 将最终数字的当前值乘以10,加上当前数字
- 移动到下一个字符,直到你碰到一个非数字
看看ASCII码table,看看数字的字符代码。对于第二步,使用其中一个寄存器作为指针:初始化为缓冲区的地址,使用 lb
从中读取当前数字,然后递增。
有帮助吗?