2017-03-24 83 views
0

입력 N을 받아 N 피보나치 숫자를 반환하는 간단한 어셈블리 코드를 만들려고합니다 (예 : 2를 입력하면 1을 출력하고 3을 입력하면 3을 입력해야 함). 출력 2). 내 코드는 오류를 던지지 않지만 숫자를 입력하면 이상한 것을 반환합니다.간단한 MIPS 어셈블리 - 피보나치 숫자 반환

1을 입력하면 2685009921을 반환합니다. 2를 입력하면 0.01을 반환합니다. 3을 입력하면 0.02를 반환합니다. 4를 입력하면 처음에 양의 정수를 묻는 텍스트를 출력 한 다음 3 (정답)을 입력합니다. 5를 입력하면 아무 것도 표시되지 않으며 Enter를 다시 누르면 실행 시간 예외가 발생합니다 (잘못된 정수 입력 syscall 5). 5 세 이상이면 이상한 오류가 발생합니다.

마치 입력 번호가 코드로 실행되는 것과 거의 같습니다. 그러면 처음 4 개의 숫자가 결과를 출력하는 이유 (처음 네 개의 syscalls 출력 데이터)가 설명됩니다.

당신은 어떻게 생각하십니까?

.data 
    introText: .asciiz "Type a positive integer, please! \n" 
    input: .word 123 


.text 
    # ask user for input 
    li $v0, 4 
    la $a0, introText 
    syscall 

    # read input int 
    li $v0, 5 
    syscall 

    # store input 
    addi $s1, $v0, 0 
    syscall 

    # main loop 
    li $s2, 0 # s2 starts at 0 and will increase until it's equal to $s1, the player input 
    li $s3, 0 # this will hold the most recent fib number 
    li $s4, 1 # this will hold the second most recent fib number 
    loop: 
    addi $s2, $s2, 1 # increment s2 for loop 
    add $s5, $s3, $s4 # make the current result the sum of the last two fib numbers 
    addi, $s4, $s3, 0 # make the second most recent fib number equal to the most recent fib number 
    addi, $s3, $s5, 0 # make the most recent fib number equal to the current fib number 
    bne $s2, $s1, loop 

    # return the answer 
    li $v0, 1 
    addi $a0, $s5, 0 
    syscall 

    # end program 
    li $v0, 10 
    syscall 

답변

0

어떤 이유로 addi $s1, $v0, 0syscall을 배치 한 다음은 코드입니다. 그 지시는 거기 있으면 안된다.

+0

고쳐 주셔서 감사합니다! – BowmanBeric