我试图找出如何使用 m68k 在 ORDERED 数组上创建二进制搜索子例程。对于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 是否像我想要的那样将数字保持在中间点,还是我错了?先感谢您!