MIPS连接字符串代码无法正常工作

时间:2017-03-01 22:19:06

标签: assembly mips strcpy

我是MIPS的开销者,我遇到了连接程序的麻烦。我写的代码就在这里

# _strConcat
#
# Concatenate the second string to the end of the first string
#
# Arguments:
#   - $a0: The address of the first string
#   - $a1: The address of the second string
# Return Value:
#   - None
_strConcat:
    move $t0, $a0 #string in buffer 1
    move $t1, $a1 #string in buffer3
    j _strCopy #copies buffer1 into buffer2 at address $a1
    move $t2, $a1 #saves buffer1 string to buffer2
    #add string inbuffer3 to end of string in buffer 1
    # $t0 contains destination, $t1 and $t2 contain strings to concatenate
first:
    lb $t4, ($t2)
    beqz $t0, endFirst
    sb $t4, ($t0)
    addi $t2, $t2, 1
    addi $t0, $t0, 1
    j first
endFirst:
    beqz $t0, endSecond
    addi $t1, $t1, 1
    addi $t0, $t0, 1
    j endFirst
endSecond:
    jr $ra

它只打印出第一个字符串而不是第二个字符串或连接字符串;我的火车是因为a0包含buffer1的第一个字符串,a1包含缓冲区3的第二个字符串,我需要在buffer1中返回一个连接的字符串。所以我将字符串从buffer1复制到buffer2中,并尝试将buffer2和buffer3放在buffer1中。如果不需要,我不一定要使用strCopy。

1 个答案:

答案 0 :(得分:0)

当您致电j时,您想要_strcpy(跳转和链接),而不是_strcpy。您直接跳转到jal _strCopy # copies buffer1 into buffer2 at address $a1 ,然后代表您返回您的调用方,而不是您的函数,因为返回地址仍未更改。修改后的代码:

{{1}}

我无法与您的其他功能进行对话,但这肯定是您只能获得一根琴弦的原因。