2017-10-12 9 views
1

이것은 작동해야하지만 분명히 그렇지는 않습니다. 문자열의 길이를 세기려고 할 때 그것은 어떤 미친 긴 숫자를 반환합니다. 한 단계 씩 프로그램을 실행하면 제대로 작동하지만 잘못된 번호가 인쇄됩니다. 누군가 다음 트랙으로 돌아가서 다음 기능을 수행 할 수 있습니까? print 루틴에서 길 잃은 la이 때문에 난 그냥 카운트문자열의 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

당신도 조립하지 않습니다 게시 한 코드를 던지고있다 알아낼 필요가있다. 그에서 제외

, 당신의 length 돌아 간다 $t0의 길이, 당신의 print 루틴이 값이 $a0에 있다고 가정있다. 그래서 당신은 잘못된 결과를 얻습니다.

0

print은 이상하게 보입니다. spim는 나에게 소리를 지른다 - la pseudoinstruction의 나쁜 구문. 내 생각 엔, 너는

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