Кто-нибудь может сказать, какую ошибку я делаю в этом коде MIPS? - PullRequest
0 голосов
/ 06 ноября 2018
   .data
array:  .space 10
prompt: .asciiz "Enter an integer (0 to quit) :"
text:   .asciiz "After sorting, the list of integers is:"
  .text
  .globl main
main:
  la $a1, array
read_numbers:
  # Rest of code omitted for brevity...
  beqz $v0, sort
  j read_numbers

sort:
  la $a1, $array

  li $v0, 4
  la $a0, text
  syscall

loop:
  lw $t0, 0($a1)
  addiu $a1, $a1, 4

  beqz $t0, done

  li $v0, 1
  move $a0, $t0
  syscall

  j loop

1 Ответ

0 голосов
/ 06 ноября 2018

Предполагая, что приведенный выше код правильно отформатирован в файле, а не в одной строке, и игнорируя отсутствие кода в

# Rest of code omitted for brevity

И игнорируя, что вы не сказали, что он должен делать, или что он делает ...

Первое, что я вижу, если вы используете ветку main:

read_numbers: # Rest of code omitted for brevity...
  beqz $v0, sort 
  j read_numbers

Но так как вы не установили v0 на что-либо, для него установлено любое значение, которое было установлено до вашего кода (и когда я запускаю его, не ноль)

Таким образом, он никогда не разветвляется на процедуру сортировки, переходит к read_numbers и выполняет бесконечный цикл.

Если он был в 'sort', он получит первое число из массива, которое равно 0 (если вы не заполнили массив каким-либо образом), увидите, что это было 0, и попытайтесь перейти к 'done', что также не нет в вашем коде.

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