Обмен только один раз?

Я пытаюсь реализовать Bubblesort в MIP. Я так близок к тому, чтобы понять это, к сожалению, мой код, похоже, меняет местами только один элемент в массиве. Я думал, что своп не связан с циклическими процедурами, поэтому при вызове подпрограммы для печати выполняется только один своп. К сожалению, я не очень разбираюсь в MIP, поэтому вполне возможно, что некоторые из них я прыгаю неправильно. Мы будем очень признательны за любое понимание.

[РЕДАКТИРОВАТЬ]

Добавление примера вывода:

поэтому [3,4,1,2,5,6] -> [3,1,4,2,5,6] и я не знаю, как продолжать менять местами, пока сортировка не будет выполнена.


person user2808315    schedule 08.03.2015    source источник


Ответы (1)


SPIM/MARS имеет функции отладки, которые позволяют выполнять код пошагово и отслеживать значения регистров по пути. Я предлагаю вам научиться использовать эти функции.

Я вижу как минимум две проблемы с вашим кодом. Во-первых, ваша подпрограмма swap никогда не возвращается, поэтому ЦП просто продолжит выполнение всего, что идет после подпрограммы swap. Вы должны заканчивать swap на jr $ra.
Другая проблема заключается в том, что вы устанавливаете $a1 на адрес length_a перед вызовом sort, но в sort вы просто делаете move $s3, $a1, что все равно даст вам адрес length_a. а не значение 6. Это move должно быть изменено на lw $s3, ($a1).

person Michael    schedule 08.03.2015