2017-10-12 20 views
1

Cela semble fonctionner, mais ce n'est pas le cas. Quand j'essaie de compter la longueur de la chaîne, elle renvoie un nombre long et fou. Quand je fais un pas le programme fonctionne bien mais imprime le mauvais numéro. Quelqu'un peut-il me rappeler sur la bonne voie pour que je puisse travailler sur la prochaine fonction? J'ai juste besoin de comprendre ce qui se débarrassant du comteMips erreur d'impression longueur de la chaîne

############################################ 
# 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 

Répondre

0

Le code que vous avez posté n'assembler même pas, parce qu'il ya une la parasite dans la routine print.

En dehors de cela, vos length routine retourne la longueur dans $t0, alors que votre routine print suppose que la valeur est en $a0. C'est pourquoi vous obtenez la mauvaise sortie.

0

Votre print a l'air bizarre. spim crie à moi - mauvaise syntaxe de la pseudoinstruction. Je suppose, vous voulez dire

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