Поиск середины массива в MIPS-сортировка слиянием
Я пытаюсь создать алгоритм сортировки слиянием в MIPS, и я обнаружил ошибку в своем коде. В моей программе я сохраняю ссылки на начальную и конечную точки моего массива ($a0
и $a1
соответственно). Я также отслеживаю его длину как $a1 - $a0 + 4
. Проблема в том, что я не знаю, как правильно вычислить среднюю точку массива. Мне нужно сделать это для этих эквивалентных вызовов функций в C:
mergesort(a, start, mid);
mergesort(a, mid + 1, end);
Я новичок в MIPS, поэтому я не совсем уверен, как вы делаете арифметику с 4-битные адреса. Я не могу добавить их как ($a0 + $a1)/2
, так как добавление двух адресов вызовет переполнение.
Мой массив объявлен сверху следующим образом:
array: .word 0:15
Я могу предположить, что будет введено не более 15 чисел. $s0
(указатель на начало массива), $s1
(указатель на пробел после последнего элемента), $a0
(аргумент начальной точки) и $a1
(аргумент конечной точки) хранятся следующим образом:
la $s0, array
move $s1, $s0 // $s1 increments by 4 each time an element is added
...
move $a0, $s0
addi $a1, $s1, -4 // subtract four because we want to refer to the last element
Как я могу вычислить средний индекс этого массива учитывая $a0 и $a1 в качестве ссылок? Любая помощь будет оценена по достоинству. Спасибо!