Я в настоящее время пытаются выяснить, как код функции нахождения наименьшего целого в MIPS после этого алгоритма ...Рекурсия в Mips
int Min(int[] A, int low, int high)
{ if (low== high) return A[low];
int mid = (low+high)/2;
int min1 = Min(int[] A, low, mid);
int min2 =Min(int[] A, mid +1, high);
if(min1>min2) return min2;
return min1;
}
Я получаю проблемы, как я пытаюсь кодировать этот в MIPS. Вот мой текущий код MIPS. Пользователь вводит до 6 целых чисел, которые хранятся в массиве. В качестве аргументов функции используются регистры $ a0, $ a1 и $ a2.
- $ a0 = INT []
- $ a1 = INT низкий // индекс
- $ a2 = INT высокий индекс //
Вот функция рекурсии ...
min:
bne $a1, $a2, recur
mul $t4, $a1, 4
add $a0, $a0, $t4
lw $v1, 0($a0)
jr $ra
# recursion start
recur:
addiu $sp, $sp, -12 #reserve 12 bytes on stack
sw $ra, 0($sp) #push return address
# mid = (low+high)/2 t0 = mid t1= min1 t2=min2 t3 = mid+1
add $t0, $a1, $a2 # t0 = low + high
div $t0, $t0, 2 # t0 = (low+high)/2
# mid1 = min(int[]A,low,mid)
min1:
sw $a2, 4($sp) #push high
addi $t3, $t0, 1 # mid+1
sw $t3, 8($sp) #store mid+1
move $a2, $t0 #change high to mid
jal min #compute
# check
move $t1, $v1 #set up the min1 = return value
# mid2 = min(int[]A,mid+1,high)
min2:
lw $a2, 4($sp) #reload high prior call
lw $a1, 8($sp) #change low to mid+1
jal min #compute
move $t2, $v1 #set as the min2 = return value
confirm:
# return mid2 if mid1 > mid2
bgt $t1, $t2, returnMid2
# else return mid1
move $v1, $t1
j minFinal
returnMid2:
move $v1, $t2
minFinal:
lw $ra, 0($sp)
addiu $sp, $sp, 12 #release stack
jr $ra
Проблема в том, какая комбинация целых чисел, которые я вводил во время программы, я никогда не получаю минимальное значение, а скорее число «543976553». Я просматривал свой код и заметки, и у меня все еще нет подсказки.
Почему вы делаете это так сложно? Простой линейный поиск не менее хорош. – erikkallen 2010-12-05 13:33:57
Вы пытались пойти шаг за шагом, например, в тренажере MARS? -> http://courses.missouristate.edu/KenVollmar/MARS/download.htm – digEmAll 2010-12-05 13:43:14