在 MIPS 中将二进制文件读入数组
Read binary file into array in MIPS
我有一个名为 trace.dat
的文件,其中包含 4 个字节的整数。谁能告诉我如何打开和读取文件,并将每个整数存储在一个名为 arr
的数组中(在 MIPS 中)?谢谢!
到目前为止我有这个:
li $v0, 13
la $a0, file #file contains the file name
li $a1, 0
li $a2, 0
syscall
add $s0, $v0, [=10=]
您的代码只是打开文件,而不是读取文件。为了实际读取您打开的文件的内容到缓冲区中,您需要使用系统调用编号 14,如下所示:
li $v0, 14
move $a0, $s0
la $a1, arr
li $a2, 32
syscall
bltz $v0, error
此代码假定 $s0
包含已打开文件的文件描述符,由于 add $s0, $v0, [=12=]
,您已将其包含在其中。它还假定 arr
的大小为 32 字节。
如果您的文件大于 32 字节,您可以编写一个循环,该循环一直运行到系统调用 14 returns 0 或小于缓冲区大小的值。然后,就可以在循环内处理从文件中读取的数据了。
我有一个名为 trace.dat
的文件,其中包含 4 个字节的整数。谁能告诉我如何打开和读取文件,并将每个整数存储在一个名为 arr
的数组中(在 MIPS 中)?谢谢!
到目前为止我有这个:
li $v0, 13
la $a0, file #file contains the file name
li $a1, 0
li $a2, 0
syscall
add $s0, $v0, [=10=]
您的代码只是打开文件,而不是读取文件。为了实际读取您打开的文件的内容到缓冲区中,您需要使用系统调用编号 14,如下所示:
li $v0, 14
move $a0, $s0
la $a1, arr
li $a2, 32
syscall
bltz $v0, error
此代码假定 $s0
包含已打开文件的文件描述符,由于 add $s0, $v0, [=12=]
,您已将其包含在其中。它还假定 arr
的大小为 32 字节。
如果您的文件大于 32 字节,您可以编写一个循环,该循环一直运行到系统调用 14 returns 0 或小于缓冲区大小的值。然后,就可以在循环内处理从文件中读取的数据了。