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

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


  8.7. Поиск и замещение строки

  Длина: 85
  Количество переменных: 3
  Контрольная сумма: 8518
  Назначение:  программа    ищет
символьную строку в БЕЙСИК-прог-
рамме  и  делает  замену  каждой
найденной строки стринга на дру-
гую строку такой же длины.
  Переменные:
     Имя: old data start
     Длина: 2
     Ячейка: 23296
     Комментарий: адрес  первого
байта замещаемой строки.
     Имя: string length
     Длина: 1
     Ячейка: 23298
     Комментарий: длина замещае-
мой строки.
     Имя: new data start
     Длина: 2
     Ячейка: 23299
     Комментарий: адрес  первого
байта замещающей строки.
     Вызов подпрограммы:
     RANDOMIZE USR адрес
  Контроль  ошибок:  если  длина
строки равна 0 или  БЕЙСИК-прог-
раммы в памяти нет, то  процеду-
ра возвращается  непосредственно
в BASIC.
  Комментарий: время  выполнения
этой программы зависит от  длины
строки и от  длины  БЕЙСИК-прог-
раммы.

   ЛИСТИНГ МАШИННЫХ КОДОВ
МЕТКА  АССЕМБЛЕР      ЧИСЛА ДЛЯ ВВОДА147.

       LD IX,(23296) 221 42 0 91
       LD HL,(23635)  42  83  92
       LD A,(23298)   58   2  91
       LD E,A         95
       CP 0          254   0
       RET Z         200
       DEC HL         43
NEWLIN INC HL         35
       INC HL         35
       INC HL         35
       INC HL         35
       JR RESET       24  23
CHECK  INC HL         35
       PUSH DE       213
       LD DE,(23627) 237 91 75 92
       AND A         167
       SBC HL,DE     237  82
       ADD HL,DE      25
       POP DE        209
       RET NC        208
       LD A,(HL)     126
       CP 13         254  13
       JR Z,NEWLIN    40 233
       CALL 6326     205 182  24
       JR NZ,COMPAR   32   8
       DEC HL         43
RESET  PUSH IX       221 229
       POP BC        193
       LD D,0         22   0
       JR CHECK       24 226
COMPAR LD A,(BC)      10
       CP (HL)       190
       JR NZ,RESET    32 245
       INC BC          3
       INC D          20
       LD A,L        122
       CP E          187
       JR NZ,CHECK    32 216
       PUSH HL       229
       LD D,0         22   0
       AND A         167
       SBC HL,DE     237  82
       LD D,E         83
       LD BC,(23299) 237 75 3 91
       INC D          20
NEXT_CHINC HL         35
       DEC D          21
       JR Z,FINISH    40   5
       LD A,(BC)      10
       LD (HL),A     119
       INC BC          3
       JR NEXT_C      24 247
FINISH POP HL        225
       JR RESET       24 215
2
  Как она работает:
  В IX загружается  адрес  заме-
щающей строки. Это значение дол-
жно быть выше RAMTOP. В HL  заг-
ружается адрес  начала  програм-
мной  области, а  в  аккумулятор
загружается длина  строки, кото-
рая копируется в  E-регистр  для
дальнейшего   использования    в
программе.  Если  длина   строки
равна 0, программа  возвращается
в BASIC.
  Устанавливается  HL,  указывая
на старший байт следующего  ука-
зателя БЕЙСИК-строки, и делается
переход к RESET.
  В  процедуре  CHECK  HL увели-
чивается, указывая на  следующий
символ. DE сохраняется в стеке и
загружается адресом области  пе-
ременных. Если HL не меньше, чем
DE, конец программы достигнут, и
после восстановления DE из  сте-
ка  программа   возвращается   в
BASIC.
  В аккумулятор загружается сим-
вол по адресу  в  HL.  Если  это
значение является знаком  ENTER,
программа возвращается к NEWLIN.
Если  аккумулятор  не   содержит
знак NUMBER (символ 14), делает-
ся переход  к  COMPAR, иначе  HL
увеличивается на 5, так  что  HL
указывает на пятый байт  найден-
ного числа.
  В процедуре RESET в BC  загру-
жается адрес строки для  поиска.
Регистр D  устанавливается  в  0
для хранения  количества  симво-
лов в строке, найденной  к  тому
времени. Программа затем возвра-
щается к CHECK.
  В процедуре COMPARE в  аккуму-
лятор загружается символ строки,
на который указывает пара регис-
тров BC. Если это значение отли-
чается от байта по адресу в  HL,
программа переходит к RESET.  BC
увеличивается, указывая на  сле-
дующий символ в строке,  регистр
D, счетчик, увеличивается.  Если
это  значение  не  равно   длине
строки, программа возвращается к
CHECK.
  Если строка найдена, HL сохра-
няется в стеке, так что програм-
ма начинает поиск для  следующе-
го случая с этого адреса.  В  DE
загружается длина строки  и  это
значение вычитается  из  HL, да-
вая значение на единицу  меньше,
чем стартовый адрес. Длина стро-
ки затем загружается в D для ис-
пользования ее в качестве  счет-
чика. В BC  загружается  старто-
вый адрес замещающей  строки,  а
регистр  D  увеличивается.   Ре-
гистр  HL  увеличивается, указы-
вая на следующую ячейку, а счет-
чик уменьшается.
  Если счетчик равен 0, HL  вос-
станавливается из  стека  и  де-
лается переход к RESET для  сле-
дующего  случая.  В  аккумулятор
загружается символ,  на  который
указывает BC, и это значение по-
мещается в ячейку  по  адресу  в
HL.  BC  увеличивается, указывая
на следующий символ, а  програм-
ма возвращается в NEXT_CHAR.



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

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.

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


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

Похожие статьи:
Заначка - недетерминируемая игра VIRUS 2.
DJ Present - игры от DJ Vovan: Doom 48, Взрыв, Первый Миллион.
Байки из склепа - О лосенке по прозвищу FREE.

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