Acc [X+i] ;не меняет флаг знака SUB 0 ;а вот это меняет! JL @@finish
а можно было бы обойтись двумя, причём обнаруживать не просто единичку в старшем бите (т.е отрицательные числа), а совершенно конкретно значение "-32768" или 0x8000.
Вот так:
ABS [X+i] JO @@finish
загружаем не само значение, а модуль от него, т.е абсолютную величину, т.е отрубает от неё знак. Операция вроде бы безвредная, кроме одного-единственного случая, -32768. Число +32768 непредставимо в виде 16-битного числа со знаком, поэтому возникает переполнение, которое мы тут же и отлавливаем.
Очень полезное наблюдение, на самом деле. В алгоритме сопровождения мы не всегда видим все точки - по мере сближения мишени дальней дистанции выходят из поля зрения, а позже даже отдельные элементы мишени ближней дистанции. И если мы поняли, что этих точек мы принципиально не увидим, то удобно их X-координату (а можно Y-координату) обозначить как -32768, и затем легко и непринуждённо проверять на это число. Число как раз самое подходящее - "несимметричное" относительно нуля, и на самом-самом краю диапазона. Собственно, яркостный центр ПРИНЦИПИАЛЬНО не может принять такое значение из-за конечного размера пятна.