ZX Pilot #35
27 ноября 1999

Coding - приемы оптимизации кода.

                C O D I N G

──────────────────────────────────────────

(C) SERGIUS PUZZLER


                      - Пап, а че  мне де-
                      лать с этим мусором?
                      - Да  просто заксорь
                      его, сынок...

                                  P. Fuzz.


   Буду  краток. Если вы часто и много по-
льзуетесь вот такой конструкцией:

        ...
M_FLAG1 EQU+1
        LD A,FLAG
        OR A
        CALL NZ,PROGA
        ...

   но желаете ее упростить и немного сэко-
номить, то предлагаю вам следующее:

        ...
M_FLAG1
        SCF ; (или OR A)
        CALL C,PROGA
        ...

   Экономия  составила 2 байта помноженных
на  количество  таких  конструкций в вашей
программе. - Не так уж и много, - восклик-
ните вы, - Но я много и не обещал, - будет
ответ.  SCF включит флаг переноса и срабо-
тает  CALL C.  OR A выключит флаг - CALL C
естественно не сработает.
   А управляться  с флагом вот таким Мака-
ром:

; ВКЛЮЧИТЬ ФЛАГ
        LD A,#37 ; SCF - FC=1
        LD (M_FLAG1),A
        ...

; ВЫКЛЮЧИТЬ ФЛАГ
        LD A,#B7 ; OR A - FC=0
        LD (M_FLAG1),A
        ...

; ПЕРЕКЛЮЧИТЬ ФЛАГ
        LD A,(M_FLAG1)
        XOR #80
        LD (M_FLAG1),A
        ...

   Ничего  нового окромя XOR  #80, который
переключает  7-ой  бит  в ячейке по адресу
M_FLAG1  переделывая SCF в OR A или обрат-
но.
   Если у  вас много адресов типа M_FLAG1,
то для удобства программирования могу пре-
дложить следующее:

        ...
        LD HL,** ; адрес выбранного флага
        CALL *_FLG ; * - SET/RES/XOR
        ...

        ...
SET_FLG            ; ВКЛЮЧИТЬ
        RES 7,(HL)
        RET
RES_FLG            ; ВЫКЛЮЧИТЬ
        SET 7,(HL)
        RET
XOR_FLG            ; ПЕРЕКЛЮЧИТЬ
        LD A,(HL)
        XOR #80
        LD (HL),A
        RET
        ...

   Каждый  вызов процедуры SET/RES/XOR те-
переча  занимает в  ОЗУ 6/6/6 bts, а зани-
мал - 5/5/8 bts.  Таким  образом в среднем
мы ничего  не выиграли,  но и не потеряли,
зато, надеюсь, стало удобнее программиров-
ать. И все таки одна процедура SET/RES/XOR
(11 bts), ипользуемая для 3-х и больше од-
новременно флагов, дает экономию.

   Теперь  немного о другом. В Miracle #3,
если  мне не  изменяет память (да вроде бы
не  с кем), есть статья об оптимизации ко-
да. Ее  автор, PSV/Dream Team, привел одну
процедуру, которая требует уточнения.
   Для ускорения работы цикла вида:

        ...
        LD BC,COUNT
LOOP
        ...
        cycle body
        ...
        DEC BC ;  работает
        LD A,B ; достаточно
        OR C   ;  медленно
        JR NZ,LOOP
        ...

   он предложил сделать так:

        ...
        LD BC,COUNT
LOOP
        ...
        cycle body
        ...
        DEC C
        JR NZ,LOOP
        DEC B
        JR NZ,LOOP
        ...

   Несомненно, что  этот вариант  работает
быстрее, но  его проверка (даже в уме) вы-
явила некорректную  настройку счетчика BC.
Поясню: если  мы запустим следующую проце-
дуру (дура вообще-то здесь ни причем):

        ...
        LD HL,0
        LD BC,#0101 ; 257 (DEC)
LOOP
        INC HL ; cycle body
        DEC C
        JR NZ,LOOP
        DEC B
        JR NZ,LOOP
        ...

   то  на выходе в HL находим значение ра-
вное  1,  вместо  ожидаемого - 257. Вывод:
после настройки счетчика BC, его необходи-
мо  подкорректировать - увеличить  на 256.
А вот и окончательный вариант:

        ...
        LD BC,COUNT
        INC B ; недостающая команда
LOOP
        ...
        cycle body
        ...
        DEC C
        JR NZ,LOOP
        DEC B
        JR NZ,LOOP
        ...

   Еще не очень  утомил? :) Yes? No? Press
"Y" for Yes or "N" for No.  А лучше нужное
подчеркнуть. Прямо маркером на мониторе.
   Скоро увидимся. По-каа...

                                    SP.WH!



Другие статьи номера:

Новости - новости Ковроского спектрума.

Событие - отчет с спектрум-амижно-писишной выставки-продажи Baltic Suсcess.

Событие - опрос посетителей спектрум-амижно-писишной выставки-продажи Baltic Suсcess.

Наш гость - рассказ Rion'a (ex ZSV) о положение дел со спектрумом в Апатитах.

Юмор - Hесерьезная история на тему спектрума.

Coding - приемы оптимизации кода.

Разберемся - прохождение забойной игрушки Snoopy & Peanuts.

О разном - Mitchell приветы к спектрумистам.

О разном - "Спектрум как класс домашних компьютеров сходит на нет. И это факт"...

Hard & soft - безглючная схема подключения музыкального сопроцессора AY-8910.

Birthday - поздравления спектрумистов с днем рождения.

Опрос - анкета опроса от Mitchell/Hardwave.

Опрос - "Спектрум или скоро совсем умрет как домашний компьютер или переродится во что-то другое" - отвечай или проиграешь!

Реклама - реклама и обьявления от спектрумистов.

Credits - создатели газеты.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Энкицлопедия - крякология Codebusters (полный список кряков).
Реклама - реклама и обьявления.
ХАЙ-TECН - Cёдня мы нe будeм ничё тут пилить, свeрлить и гнуть,a зaймёмся кoe-чeм другим!

В этот день...   26 февраля