Mips错误打印字符串的长度

时间:2017-10-12 19:21:37

标签: string count mips

这似乎应该有效,但显然不行。当我尝试计算字符串的长度时,它返回一些疯狂的长号。当我一步程序它工作正常但打印出错误的数字。有人能指点我回到正轨,以便我可以开展下一个功能吗?我只需要找出丢掉计数的内容

############################################
# Program Name: strings.s
# Programmer: David Bierbrauer
# Date: 9/07/2017
############################################
# Functional Description:
#
#
############################################
# Cross References:
#
#
############################################

    .data   # Data declaration section
stringa: .asciiz "Enter the first string: "
stringb: .asciiz "\nEnter the second string: "
    .text

main:   # Start of code section

    #li $v0, 4      #get first string input
    la $a0, stringa
    jal read
    jal length
    jal print  
                #get second string input
    la $a0, stringb
    jal read
    jal length
    jal print
    j end


length:
    li $t0, -1  #loop count 0
    j lengthloop
lengthloop:     #exit address $s1
    lb $t1, 0($a0)      #load next char into $t1
    beqz $t1, endlength
    addi $a0, $a0, 1    #increment string pointer
    addi $t0, $t0, 1    #increment count
    j lengthloop
endlength:
    jr $ra


equality:
    lb $t2, 0($a0)
    lb $t3, 0($a1)
    bne $t2,$t3 notequal

append:

print:
    li $v0, 1
    la 
    syscall
    jr $ra
read:
    li $v0, 4
    syscall #print prompt

    li $v0,9
    li $a0,80
    syscall
    move $a0,$v0

    li $v0,8
    li $a1,80
    syscall

    jr $ra
end:
    li $v0, 10
    syscall

2 个答案:

答案 0 :(得分:0)

您发布的代码甚至没有汇编,因为la例程中有一个迷路print

除此之外,您的length例程会在$t0中返回长度,而您的print例程会假定值在$a0中。这就是你输出错误的原因。

答案 1 :(得分:0)

你的print看起来很奇怪。 spim对我大吼大叫 - la伪指令的语法错误。我想,你的意思是

print:
    li $v0, 1
    la $a0, 0($t0)
    syscall
    jr $ra