ZX Review #7-8-9-10
08 ноября 1997

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

(c) Иван Рощин, г.Москва, 1997

      Несколько предложений
по усовершенствованию ассемблера

1. Если  ассемблер  обеспечивает
   работу  с  блоками  текста, в
   нем есть команда "удалить вы-
   деленный блок из текста".  Но
   иногда бывает необходима про-
   тивоположная команда  -  уда-
   лить весь текст, кроме  выде-
   ленного блока.

2. Возможность превратить  выде-
   ленный блок текста в  коммен-
   тарий и наоборот.

                 Пример
                 ──────
   LD   A,1                 ;LD   A,1
   LD   B,2      <---->     ;LD   B,2
   CALL M1                  ;CALL M1
   CALL M2                  ;CALL M2

   Разумеется, того же результа-
   та можно добиться при исполь-
   зовании  директив   условного
   ассемблирования, но предлага-
   емый способ более нагляден.

3. Когда  вы  пишете  достаточно
   большую  программу, надо  все
   время помнить, какие метки вы
   уже в ней использовали, иначе
   можно повторно определить уже
   существующую метку. Тут могла
   бы помочь такая  возможность:
   вы набираете строку с меткой,
   не задумываясь о  том, встре-
   чалась она в тексте или  нет,
   и когда курсор установлен  на
   метку, вы нажимаете некоторую
   комбинацию клавиш, и произво-
   дится проверка:  не  была  ли
   эта метка  уже  определена  в
   программе?

4. Структуризация    выделенного
   блока текста, т.е. после каж-
   дой команды передачи управле-
   ния  (JP,JR,DJNZ,RET) автома-
   тически  вставляется   пустая
   строка. Это повышает удобочи-
   таемость текста.

                 Пример
                 ──────
до преобразования:    после преобразования

L1 LD   A,(M1)        L1 LD   A,(M1)
   LD   C,A              LD   C,A
   CALL SUBR1            CALL SUBR1
   DJNZ L1               DJNZ L1
   XOR  A
   RET                   XOR  A
M1 DB   4,5,6            RET

                      M1 DB   4,5,6


5. Перевод  чисел  в  выделенном
   блоке текста из одной системы
   счисления в другую, наподобие
   того, как это сделано в  обо-
   лочке "Ревю".

                 Пример
                 ──────
до преобразования:    после преобразования

   LD   HL,#4000         LD   HL,16384
   LD   DE,#4001         LD   DE,16385
   .............         .............


6. Подсчет   байтов,  занимаемых
   участком  программы,  находя-
   щемся в выделенном блоке тек-
   ста.

                 Пример
                 ──────
   CALL M1
   LD   A,7
   LD   (HL),A
   RET
   DB   12,34

   Результат: 3+2+1+1+2=9 байт.


7. Подсчет числа тактов, за  ко-
   торое выполняются находящиеся
   в выделенном блоке текста ко-
   манды  (это бывает необходимо
   при программировании MULTICO-
   LOR'а).

                 Пример
                 ──────
   XOR  A
   LD   (HL),A
   LD   A,6
   LD   B,4

   Результат: 4+7+7+7=25 тактов.


8. Всем известна  директива  ас-
   семблера  DB, позволяющая оп-
   ределить один  или  несколько
   байтов  данных.  В  некоторых
   случаях более  удобным  может
   быть сокращенный способ запи-
   си этой директивы. Для совме-
   стимости с другими  ассембле-
   рами необходимо предусмотреть
   и   обратное   преобразование
   (всего текста или выделенного
   блока), при котором сокращен-
   ная форма записи  превратится
   в полную.

                 Пример
                 ──────
   было:

      DB   #12,#34,#56
      DB   %01110111,%11101110

   стало:

      DB   #123456
      DB   %0111011111101110


9. Можно сделать программу более
   наглядной, значительно облег-
   чить ее написание и  отладку,
   если вместо команды CP и сле-
   дующей за ней команды  услов-
   ной передачи  управления  ис-
   пользовать  намного более по-
   нятные операторы:

                 Пример
                 ──────
   было:        стало:
   .........    .........
   CP   13      IF   A=13 THEN JR M1
   JR   Z,M1    LD   A,(X)
   LD   A,(X)   IF   A<(IX+5) THEN JP M2
   CP   (IX+5)  IF   A<=E THEN JR M3
   JP   C,M2    IF   A<>(HL) THEN CALL M4
   CP   E       IF   A=0 THEN RET
   JR   C,M3    .........
   JR   Z,M3
   CP   (HL)
   CALL NZ,M4
   AND  A
   RET  Z
   .........

   Вместо IF A<(IX+5)  можно пи-
   сать  и  IF (IX+5)>A - ассем-
   блер  сам  разберется,  какие
   команды формировать в объект-
   ном коде.

   Необходимо предусмотреть воз-
   можность перекодировки  "нор-
   мальной" программы (всего те-
   кста или выделенного блока) в
   этот формат, и наоборот  (для
   совместимости  с  другими ас-
   семблерами).

           *   *   *




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

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

Программы, которые мы выбираем - Возможные последствия использования недокументированных команд.

Программы, которые мы выбираем - О замеченных шероховатостях в работе некоторых программ и пожелания к следующим версиям.

Программы, которые мы выбираем - Предложение ко всем авторам программ, печатающих дамп памяти. Программистам, использующим защиту дисков от копирования.

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

Этюды - Программа вывода значений амплитуды каналов муз. сопроцессора на бордюр.

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

Этюды - Программа сортировки массива по возрастанию. Процедура заполнения экрана заданным атрибутом. Процедура проявления картинки. Эффект летящих навстречу звезд. "Душ", идущий из верхнего левого угла экрана. Процедура "осыпания" картинки по пиксельным линиям. Программа "вытягивания" картинки под углом в 45 градусов. Три процедуры "Scroll".

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


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

Похожие статьи:
Презентация - полностью русифицированная версия игры They stole a million!
Мозаика - Телефонный ретранслятор: поток сознания спектрумистов.
Открытые письма Nemo №6.251

В этот день...   26 июня