Сбой при вызове процедуры MIPS - PullRequest
0 голосов
/ 20 октября 2019

Я работаю над заданием для класса, где я должен найти сумму 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

1 Ответ

0 голосов
/ 20 октября 2019

Для меня первая строка, на которую жалуется QtSpim, на самом деле move $s2, $v2.

На процессорах MIPS нет регистра $v2, поэтому вам придется найти какой-то другой регистр для использования в егоместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...