2017-10-12 101 views
1

这似乎应该工作,但显然没有。当我尝试计算字符串的长度时,它会返回一些疯狂的长整数。当我一步一步的程序,它工作正常,但打印出错误的数字。有人能让我回到正轨,以便我可以在下一个功能上工作吗?我只需要弄清楚什么是摆脱计数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 

回答

0

您已经发布甚至不汇编的代码,因为在常规print有一个流浪la

除此之外,您的length例程返回的长度为$t0,而您的print例程假定值为$a0。这就是为什么你得到错误的输出。

0

你的print看起来很奇怪。 spim对我说 - 坏指令la的语法。我猜你的意思是

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