nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

QuatCore: как укоротить Hello, World на 2 байта

У нас чтобы загрузить новый символ и проверить, что это ещё не окончание строки (число -32768), использовалось 3 команды:

    Acc     [X+i]   ;не меняет флаг знака
    SUB     0       ;а вот это меняет!
    JL      @@finish


а можно было бы обойтись двумя, причём обнаруживать не просто единичку в старшем бите (т.е отрицательные числа), а совершенно конкретно значение "-32768" или 0x8000.


Вот так:
    ABS  [X+i]
    JO   @@finish


загружаем не само значение, а модуль от него, т.е абсолютную величину, т.е отрубает от неё знак. Операция вроде бы безвредная, кроме одного-единственного случая, -32768. Число +32768 непредставимо в виде 16-битного числа со знаком, поэтому возникает переполнение, которое мы тут же и отлавливаем.

Очень полезное наблюдение, на самом деле. В алгоритме сопровождения мы не всегда видим все точки - по мере сближения мишени дальней дистанции выходят из поля зрения, а позже даже отдельные элементы мишени ближней дистанции. И если мы поняли, что этих точек мы принципиально не увидим, то удобно их X-координату (а можно Y-координату) обозначить как -32768, и затем легко и непринуждённо проверять на это число. Число как раз самое подходящее - "несимметричное" относительно нуля, и на самом-самом краю диапазона. Собственно, яркостный центр ПРИНЦИПИАЛЬНО не может принять такое значение из-за конечного размера пятна.

Tags: ПЛИС, математика, программки, работа, странные девайсы
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments