2017-10-12 4 views
1

Dies scheint wie es sollte funktionieren, aber eindeutig nicht. Wenn ich versuche, die Länge der Saite zu zählen, gibt sie eine verrückte lange Zahl zurück. Wenn ich das Programm Schritt für Schritt durchführe, funktioniert es einwandfrei, druckt aber die falsche Nummer aus. Kann mich jemand auf die Spur bringen, damit ich an der nächsten Funktion arbeiten kann? Ich muss nur herausfinden, was die Zählung Abwerfen wirdMips Fehler beim Drucken Länge der Zeichenfolge

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

Antwort

0

Der Code, den Sie geschrieben haben nicht zusammenbauen nicht einmal, weil es eine Streu la in der print Routine ist.

Abgesehen davon, dass Ihre length Routine kehrt die Länge in $t0, während print Routine geht davon aus, dass der Wert in $a0 ist. Deshalb erhalten Sie die falsche Ausgabe.

0

Ihre print sieht seltsam aus. spim schreit mich an - schlechte Syntax von la Pseudoanweisung. Ich denke, du meinst

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