首先,我已经检查了相关的问题,但我仍然无法克服这个程序的问题。
我要做的是,基本上,取一个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)中获得任何进一步的结果。
答案 0 :(得分:1)
您的代码存在一些问题:
首先,.byte 5
不会为5个字节保留空间,它会声明一个值为5的单个字节。如果你想要5个字节,你应该说.space 5
(字节将初始化为价值0 IIRC)。
其次,系统调用8再引用一个参数; $a1 = maximum number of characters to read
,您尚未指定。如果缓冲区中有5个字节的空间,则应将$a1
设置为5.请注意,“要读取的最大字符数”实际上意味着“要读取的最大字符数包括终止空字符“。