Я работаю над заданием для класса, где я должен найти сумму 0 - n числа n (пример: сумма 5 = 1 + 2 + 3 + 4 + 5). Мы уже сделали это для предыдущего назначения, и теперь задача состоит в том, чтобы внедрить вызов функции add2 (int num1, int num2) в наше предыдущее решение. Когда я загружаю свое решение в QtSpim, я получаю сообщение о том, что есть синтаксическая ошибка для строки
move $s1, $v1 # Store returned sum in $s1
, и когда я пытаюсь пройти программу, я получаю сообщение об ошибке, что моя процедура Add2 неопределены. Я попытался переместить мою процедуру в начало программы, чтобы исправить эту ошибку (пришлось сделать это с моим разделом .data, чтобы иметь возможность загрузить что-нибудь из него), но это ничего не делает. Не совсем уверен, что я здесь делаю не так. Вот мой код:
.data
msg1: .asciiz "Please enter a value for n: \n"
msg2: .asciiz "The sum from 1 to "
msg3: .asciiz " is: "
newline: .asciiz "\n"
.text
.globl main
main:
# Print string msg1
li $v0, 4 # print_string syscall code = 4
la $a0, msg1 # Load msg1 into arg register
syscall
# Get and store n value from user
li $v0, 5 # read_int syscall code = 5
syscall
move $s0, $v0 # Move syscall results to saved register
li $s1, 0 # $s1 value keeps total
li $s2, 1 # $s2 = 1 used to increment loop
LOOP:
move $a1, $s1 # Load current sum into $a1
move $a2, $s2 # Load current counter into $a1
jal Add2 # Add both and return in $v1 and $v2
move $s1, $v1 # Store returned sum in $s1
move $s2, $v2 # Store incremented counter in $s2
bne $s0, $v2, LOOP # If $v2 not equal to n value branch to loop
add $s1, $s1, $s0 # Add final value to $s1
# Print final message and total
# First half of message
li $v0, 4 # print_string syscall code = 4
la $a0, msg2 # Load msg2 into $a0
syscall
# Print n value
li $v0, 1 # print_int syscall code = 1
move $a0, $s0 # Move $s0 into $a0
syscall
# Second half of message
li $v0, 4 # print_string syscall code = 4
la $a0, msg3 # Load msg3 into $a0
syscall
# Print total
li $v0, 1 # print_int syscall code = 1
move $a0, $t0 # Move total in $t0 to $a0
syscall
li $v0, 10 # exit syscall code = 10
syscall
# Add2 function
Add2:
add $v1, $a1, $a2 # Add $a1 and $a2 and save in $v1
addi $v2, $a2, 1 # Increment $a2 by one and store in $v2
jr $ra