Я пытаюсь выяснить, как сделать процедуру двоичного поиска в массиве ORDERED, используя m68k. Для Java я бы сделал
int binSearch(int key, int &lo, int &hi)
{
if (hi < lo)
return NOT_FOUND; //RETURN with V = 1
int mid = (lo+hi) / 2;
if (key == array[mid])
return mid;
else if (key < array[mid]) // go left
return binSearch(key, lo, mid-1); // left
else
return binSearch(key, mid+1, hi); // right
}
Я пытаюсь собрать это в сборку. То, что я пока имею, это
link A6,#0
movem.l D1/A1-A2,-(sp)
move.w 8(A6),D1 *key t
movea.l 10(A6),A1 *lo
movea.l 14(A6),A2 *hi
cmpa.l A1,A2 *if hi>lo
BHS else
move.l A1,D1 *low D1
add.l A2,D1 *adds hi
asr.l #1,D1 * divide by 2
В основном, что мне делать в этот момент? Сравниваю ли я D1 с номером, который я ищу, и затем, в зависимости от того, является ли он ниже и выше, снова вызывает подпрограмму? У D1 есть номер в средней точке, как я хочу, или я ошибаюсь? Заранее спасибо!