0

首先,我已经检查了与这个相关的问题,但我仍然无法克服这个程序的问题。

我要做的是,基本上,获取一个 byte[] 输入并将其复制到另一个 byte[],然后打印重复的数组。我的代码如上:

.data
hello: .asciiz "hello"
inp: .byte 5
dup: .byte 5

.text

main:
    la $a0, inp #get input
    li $v0, 8
    syscall

    la $s0, dup #load arrays on s0 and s1
    la $s1, inp     

    li $t0, 0   #instantiate offsets as 0
    li $t2, 0
Load:
    lb $t1, 0($s1)      #load first byte
    sub $t1, $t1, 48    #test if it is <0   
    bltz, $t1, exit     #if so go to exit
    add $t1, $t1, 48

    sb $t1, 0($s0)      #else save the byte
    add $s1, $s1, 1     #increment offsets
    add $s0, $s0, 1

    j Load

    la $a0, hello
    li $v0, 4
    syscall

exit:
    li $t1, 0
    add $s0, $s0, 1
    sb $t1, 0($s0)  #add null to the end of dup
    la $a0, dup
    li $v0, 4
    syscall

    jr $ra

我是 MIPS 的新手,我无法识别问题所在。

顺便说一句,我将 123 作为输入传递,我得到无数个 1 作为输出,这告诉我我被困在循环中,再也没有在 $s1 (inp) 中得到任何进一步的信息。

4

1 回答 1

2

您的代码有几个问题:

首先,.byte 5不为 5 个字节保留空间,它声明一个值为 5 的字节。如果你想要 5 个字节,你应该说.space 5(字节将使用值 0 IIRC 初始化)。

其次,系统调用 8 多了一个参数;$a1 = maximum number of characters to read,你没有指定。如果缓冲区中有 5 个字节的空间,则应设置$a1为 5。请注意,“要读取的最大字符数”实际上是指“要读取的最大字符数,包括终止的空字符”

于 2014-10-31T06:39:07.497 回答