значение вычитания повторяется дважды - PullRequest
0 голосов
/ 21 июня 2020

У меня есть код для викторины, который в итоге дает количество правильных и неправильных ответов. Чтобы вычислить неправильные, я вычитаю общее количество вопросов с правильными. Но на выходе количество неверных ответов повторяется дважды.

Я не могу найти ошибку в моем коде, даже если я прошагу через отладчик пошагово. Я запустил это на МАРСЕ.

.data
    Q1: .asciiz "Q1) What is the capital of Odisha?\n1) Chennai\n2) Bhubaneswar\n3) Cuttack\n4) Delhi\nAnswer:"
    Q2: .asciiz "Q2) What is the capital of India?\n1) New York\n2) Bhopal\n3) Chennai\n4) Delhi\nAnswer:"
    Q3: .asciiz "Q3) How many legs do cats have?\n1) Two\n2) Four\n3) Three\n4) Nine\nAnswer:"
    Q4: .asciiz "Q4) Which of the following is a Vegetable?\n1) Water\n2) Orange\n3) Lemon\n4) Carrot\nAnswer:"
    Q5: .asciiz "Q5) Which of the following is a gaming company?\n1) Toyota\n2) Tata\n3) NaughtyDog\n4) RoyalEnfield\nAnswer:"

    CORRECT: .asciiz "\n\n[SCOREBOARD]\n\nCorrect Answers: "
    WRONG: .asciiz "\nIncorrect Answers: "
    
    gameover: .asciiz "\n\nGame Over"
    continue: .asciiz "\n\nVery Good!"

.text
.globl main
main:
    la $a0, Q1      ## Question 1
    li $v0, 4
    li $t0, 0
    syscall 
    
    li $s0, 2       ## Answer of Q1 
    li $v0, 5
    syscall
    
    move $t1, $v0       ## Moving input to $t0 
    bne $t1, $s0, NEXT1
    addi $t0, $t0, 1

NEXT1:
    la $a0, Q2      ## Question 2
    li $v0, 4
    syscall
    
    li $s1, 4       ## Answer of Q2     
    li $v0, 5
    syscall
    
    move $t2, $v0       ## Moving input to $t1 
    bne $t2, $s1, NEXT2
    addi $t0, $t0, 1
    
NEXT2:
    la $a0, Q3      ## Question 3
    li $v0, 4
    syscall
    
    li $s2, 2       ## Answer of Q3     
    li $v0, 5
    syscall
    
    move $t3, $v0       ## Moving input to $t2 
    bne $t3, $s2, NEXT3
    addi $t0, $t0, 1

NEXT3:
    la $a0, Q4      ## Question 4
    li $v0, 4
    syscall
    
    li $s3, 4       ## Answer of Q4     
    li $v0, 5
    syscall
    
    move $t4, $v0       ## Moving input to $t3 
    bne $t4, $s3, NEXT4
    addi $t0, $t0, 1

NEXT4:
    la $a0, Q5      ## Question 5
    li $v0, 4
    syscall
    
    li $s4, 3       ## Answer of Q5 
    li $v0, 5
    syscall
    
    move $t5, $v0       ## Moving input to $t3 
    bne $t5, $s4, FINALSCORE
    addi $t0, $t0, 1

    
FINALSCORE:
    la $a0, CORRECT
    li $v0, 4
    syscall
    
    move $a0, $t0
    li $v0, 1
    syscall
    
    la $a0, WRONG
    li $v0, 4
    li $t6, 5
    syscall
    
    sub $t7, $t6, $t0
    move $a0, $t7
    li $v0, 1
    syscall
    
    move $s1, $t0
    syscall

    slt $t4,$s1,$s2      # checks if $s0 > $s1
    beq $t4,1,FINISH     # if $s1 < $s2, goes to label1
    beq $t4,$zero,NIVEL2 # if $s1 > $s2, goes to label3
    beq $s1,$s2,NIVEL2   # if $s1 = $s2, goes to label2 
    
FINISH:
    la $a0, gameover
    li $v0, 4
    syscall
    
    li $v0, 10          ##END OF CODE :)
    syscall

NIVEL2:
    la $a0, continue
    li $v0, 4
    syscall
    
    li $v0, 10          ##END OF CODE :)
    syscall

1 Ответ

2 голосов
/ 21 июня 2020

Во фрагменте, где вы выводите количество неправильных ответов, у вас есть второй системный вызов для функции 1:

la $a0, WRONG
li $v0, 4
li $t6, 5
syscall

sub $t7, $t6, $t0
move $a0, $t7
li $v0, 1
syscall            <- this prints the # of wrongs

move $s1, $t0
syscall            <- this prints the # of wrongs again, since $v0 is still 1
...