在MARS IDE中使用MIPS逐个字符地读取文件

时间:2015-12-02 21:50:21

标签: assembly mips mars-simulator

如何在没有硬编码$ t0

的值的情况下循环到文件末尾
BubbleSort

因为当我使用$ a2时它不起作用,但它在这里说http://courses.missouristate.edu/kenvollmar/mars/help/syscallhelp.html

这 从文件中读取

li $ v0,14
$ a0 =文件描述符

$ a1 =输入缓冲区的地址

$ a2 =要读取的最大字符数$ v0包含字符数

当我用它作为硬编码的替代品时($ addi $ t0,$ t0,1000) $ a2仍为0

        addi $t0, $t0,1000

loop:   beq $t0, $0, loopend
        #this code reads in a character from the file
        jal readchar


#print the character to the console
        li $v0,11
        move $a0,$t1
        syscall

        addi $t0,$t0,-1
        j loop
loopend:

readchar:   li $v0,14
            move $a0,$s6
            la $a1,inchar
            li $a2,1
            syscall
            lb $t1,inchar
            jr $ra

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定在系统调用之前将$a2移动到$t0 的目的是什么。 $a2是系统调用的参数,您可以在其中指定要读取的最大字符数。返回值 - 即实际读取的字符数 - 仅在系统调用后可用,并且将在寄存器$v0中。

因此,如果在系统调用之前将{1}放入$a2并且系统调用后$v0包含零,那么您可能已到达文件的末尾。