ZX Format #07: Эффективные вычисления на ассемблере

Быстрые вычисления в ассемблере

music by COOPER
(C) GreenFort

Да, сколько проблем с этой математикой, а ведь надо, и надо просто повсеместно. То векторная графика дает о себе знать, то подсчет очков в своей игрушке, а то и расчет положения светил на небосводе. Так или иначе, всегда возникают ситуации, когда скорости ПЗУшного калькулятора явно недостаточно. Мы предлагаем вашему вниманию цикл статей, посвященных математическим операциям. Подразумевается, что человек, читающий эти строки, уже усвоил азы программирования на Ассемблере.

Начнем с простого:

1. ДЕЛЕНИЕ.

Принцип работы процедуры деления основан на делении в столбик, единственное отличие только в системе счисления: она двоичная.

1.1 Пример простейшей процедуры деления:

НА ВХОДЕ : C = Делимое, В = Делитель
НА ВЫХОДЕ: L = результат, A = остаток

;L=C/B:
DIVIS XOR A ;обнуление текущего остатка
DIVIS2 LD L,#01 ;счетчик (сдвиг 8 раз)
D1 RL C ;чтение текущего разряда
RLA ;накопитель разрядов
CP B ;какой результат текущего разряда
JR C,ZER ;переход,если текущий разряд=0
SUB B ;тек.разряд=1,снятие с накопителя
SLI L ;занесение разряда=1
JR NC,D1 ;переход,если счетчик не переполнился
RET ;выход
ZER SLA L ;занесение разряда=0
JR NC,D1 ;переход,если счетчик не переполнился
RET ;выход

L - используется как счетчик и хранит результат.
A - остаток деления, из C последовательно считываются разряды в регистр A.
B - остается неизменным после деления.

Процедурку можно, кстати, раскрыть.

Если вам нужна большая точность деления, то можно продолжить делить.

Пример:
LD C,что делить будете
LD B,на что делить будете

CALL DIVIS;первичное деление
;C=0,A-остаток
LD H,L ;сохранение результата
CALL DIVIS2 ;вторичное деление
;без обнуления остатка

Результат в HL:

H = целая часть результата
L = дробная часть результата

Получаемая точность: +-(1/256),т.е. два знака после запятой обеспечивается.

1.2 Процедурка деления 3-х байтовых чисел

На входе : A,H,L - три байта делимого
B,D,E - три байта делителя
На выходе: A,H,L - результат

;A,H,L=(A,H,L)/(B,D,E)
DIVISIO
LD C,A ;старший байт делимого храним в C
XOR A ;обнуление накопителя
EXX ;резрядов
LD HL,#01 ;счетчик (на 24) и
LD B,H ;трехбайтовый хранитель
EXX ;результата
DIV1SLA L ;выборка разряда
RL H
RL C
RLA
CP B ;накопитель больше делителя?
JR C,DIV2 ;если меньше,то результат 0)
JR NZ,DIV3;в случае,если больше ;результат=1 накопитель уменьшается
EX AF,AF' ;сохранение A
LD A,C ;аналогично проверка
CP D ;младших двух байт накопителя и делителя
JR C,DIV22;
JR NZ,DIV32
LD A,H
CP E
JR C,DIV22
DIV32 EX AF,AF' ;накопитель=делитель
DIV3EX AF,AF'
LD A,L ;накопитель-делитель
LD L,H ;(младшие 2 разряда)
LD H,C
AND A
SBC HL,DE
LD C,H
LD H,L
LD L,A
JR NC,DIV33
EX AF,AF' ;накопитель-делитель
SUB B ;старший разряд при
DEC A ;переполнении младших
DIV34 EXX ;занесение в результат
SLI L ;текущий бит=1
RL H
RL B
EXX
JP NC,DIV1;счетчик еще не кончился
JP DIVEXIT;счетчик переполнился ;конец деления
DIV22 EX AF,AF' ;занесение в результат=0
DIV2EXX
SLA L
RL H
RL B
EXX
JP NC,DIV1;счетчик еще не кончился
DIVEXIT EXX ;счетчик переполнился
PUSH HL ;конец деления
LD A,B
EXX
POP HL
RET
DIV33 EX AF,AF' ;накопитель-делитель
SUB B ;старший разряд без
JP DIV34 ;переполнения младших

Затем довольно удобно использовать результат для сложения или вычитания:

Сложение результата с 3-х байтовым числом

CALL DIVISIO
LD B,1-й байт, который прибавляем
LD DE,2 и 3 байт, которые прибавляем
ADD HL,DE
ADC A,B

2. УМНОЖЕНИЕ.

Умножение, как и деление, базируется на умножении в столбик.

2.1 Простейшая процедурка умножения.

Пример:

;HL=B*C
LD HL,#0 ;подготовка результата
LD E,B ;коэф. текущего разряда
LD D,H
LD B,#08 ;счетчик
MCYCSRL C ;выборка разряда второго множителя
JP NC,NOADD ;разряд=0 (DE*0=0)
ADD HL,DE ;разряд=1 (DE*1=DE)
NOADD SLA E ;смена коэффициента разряда на след. разряд
RL D ;ряда на след. разряд
DJNZ MCYC ;цикл на 8
RET ;выход

Конечно, сразу бросается в глаза, что и эту конструкцию можно раскрыть.

2.2 Умножение 3-х байтовых чисел.

;A,H,L=A,H,L*B,D,E

MULTI EXX
LD HL,FLAG;сброс переноса
RES 0,(HL)
LD B,24 ;счетчик
LD HL,#0 ;результат (C,H,L)
LD C,H
PF2 EXX
SRL B ;выборка разряда
RR D ;второго множителя
RR E
JR NC,PF3 ;разряд=0,переход на выборку следующего разряда
EX AF,AF' ;сложение ответа с
PUSH HL ;текущим коэф.разряда
EXX
POP DE
ADD HL,DE
ADC A,C
JP NC,NOFLAG
;результат не помещается в трех байтах!
LD A,(FLAG) ;обработчик переполнения
OR 1 ;ния
LD (FLAG),A
RET
NOFLAG LD C,A
EXX
EX AF,AF'
-PF3 SLA L ;переход к следующему
RL H ;текущий коэф.(AHL*2)
RLA
EXX
DJNZ PF2 ;цикл на 24
LD A,C
RET ;выход
FLAG DB 0

1 в переменной FLAG в случае переполнения результата; хотя очень часто программы все продуманы и необходимости в нем нет. Все возможные последующие операции (сложение, вычитание) с ответом такие же, как и в делении.

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

Продолжение следует.

Оглавление издания: ZX Format #07

  • От авторов
    Обновление информации о SMUC, проблемы с дистрибуцией и планы на будущие выпуски ZX Format. Авторы затрагивают устаревшие данные о SMUC и проблемы распространения ZF-6. В предстоящем выпуске будут описания игр и новые проекты.
  • Аторы журнала
    Контактная информация и данные об редакционной команде для ZX-Format No.7. Предоставляются почтовые и электронные адреса, а также контактные телефоны. Информация о доступности их веб-сайта и конкретные инструкции по контактам.
  • Содержание номера
    Обзор значимых программных новинок на петербургском рынке этой осенью. Детальное описание игр, советы по программированию и проекты оборудования. Интервью, философские притчи и письма читателей дополняют выпуск.
  • Игрушки - Welcome
    Обзор новинок ПО для ZX Spectrum, включая игры как 'Los Angeles Drugs Bust' и 'Jungle Warfare'. Каждое описание игры предоставляет информацию о графике, геймплее и функциях. Охватываются различные жанры от экшена до стратегии, демонстрируя разнообразие программного обеспечения.
  • Игрушки - Алешкин А.В.
    Статья описывает игру 'TAI-PAN' как аркадно-экономическую игру, действие которой происходит на Востоке XIX века, с акцентом на торговле и выживании среди пиратов и опасностей. В ней рассматриваются игровые механики, такие как торговля товарами, управление финансами и навигация по морям на разных судах. Несмотря на занимательный сюжет и интерфейс, игра не получила широкой известности в России.
  • Игрушки - Soft
    Капризный рассказ в фантастическом мире, где цвета беседуют с Последним, персонажем, рассказывающим истории о древних людях, кодерах и загадочном прошлом. История исследует темы языка, перевода и создания 'Последнего' среди фантастических существ, таких как летающие бегемоты и морские жирафы. Она представляет собой художественный нарратив с юмористическими элементами, сочетая научную фантастику с сатирой.
  • Игрушки - Alex ASP
    Исследуется пародия на «Властелин колец» Толкина под названием «Тошнит от колец» от Delta 4. Текст ссылается на адаптации, юмористические приключения персонажей, таких как Фордо и Бимбо, и различающиеся версии Delta 4 за годы. Упоминаются ожидаемые приквелы и выдержки из переписки с Фергусом МакНейлом из Delta 4.
  • Игрушки - Гил-Гелад
    Статья представляет собой подробное руководство по работе с интерфейсом 3D Construction Kit для ZX Spectrum. Объясняются параметры меню для управления файлами, настройки игры и условий в игре. Также рассматривается создание объектов, их редактирование и реализация логики в программе.
  • Программистам - Дмитрий Рудовский
    Завершение описания команд ББ и советы по их использованию. Подробно описывается использование команды CLOCK для управления временем и будильником на ZX Spectrum. Также объясняется команда SORT для сортировки массивов и вводятся новые логические и математические функции.
  • Программистам - Angel
    Введение в программирование на ассемблере для начинающих с освещением базовых концепций и команд. Подробное объяснение регистров и флагов процессора с примерами. Предоставлены практические советы по переходу с Basic на ассемблер.
  • Программистам - GreenFort
    Обсуждение быстрых вычислений на ассемблере для задач, таких как векторная графика и астрономия. Описываются процедуры двоичного деления и умножения с примерами для разных размеров байтов. Подчеркивается адаптивность этих методов для повышения точности.
  • Программистам - TP, Stinger
    Подробное техническое описание формата файла Mod для музыкальной композиции на ZX Spectrum, с акцентом на структуру и смещения данных для названия, инструментов и паттернов.
  • Программистам - Research
    Статья описывает возможности и ограничения программы Convert, сосредотачиваясь на ее использовании для конвертации изображений в формат BMC. Включены технические детали о функциях программы, таких как методы дитеринга, вывод в формате спрайтов и экрана, и удаление лишних точек. Также кратко обсуждается исходный код X-Color и его возможные применения.
  • Обзор
    Статья обсуждает демо-пати ENLiGHT'97, состоявшуюся в Санкт-Петербурге 24 августа 1997 года, с участием платформ Spectrum, Amiga и ПК. Мероприятие собрало около 1100 делегатов, что привело к переполненности и техническим проблемам, из-за чего второй день был отменен. Несмотря на эти проблемы, мероприятие в целом было приятным, и есть надежда на его повторение в 1998 году.
  • Обзор
    Обзор выставки VideoFAIR в Манеже с акцентом на видео- и аудиооборудование. Amiga-service и различные компании представили свои технологические достижения в системах видеомонтажа и вещания. Примечательные инновации включают 3D дисплеи с лазерным сканированием и профессиональные аудио решения.
  • Железо - Nemo
    Обсуждение экспорта технологий KAY для децентрализации производства Spectrum. Выделяются потенциальные выгоды и проблемы местного производства. Акцентируется внимание на гарантии качества и системах поддержки.
  • Железо
    Статья описывает разработку новой материнской платы Scorpion, нацеленной на улучшение графики, скорости и совместимости с современными периферийными устройствами, такими как клавиатуры и мыши IBM. Представлена плата GMX (Graphic Memory Extension), предназначенная для модернизации существующих моделей Scorpion до возможностей новой материнской платы. Плата GMX предлагает значительные улучшения в объеме памяти, графике и скорости обработки, при этом сохраняя совместимость со стандартами ZX Spectrum и Pentagon.
  • Железо
    Статья предлагает детальный обзор двух популярных у пользователей ZX Spectrum в Санкт-Петербурге аудиоусилителей. В ней подчеркиваются преимущества и характеристики низковольтного усилителя 2 X 2W и автомобильного усилителя 2 X 22W. Также в статье представлен прайс-лист и инструкции по заказу через фирму 'Nemo'.
  • Примьера
    Статья описывает улучшения и особенности версии 1.1 Turbo Assembler для ZX Spectrum. Подчеркиваются отличия от версии 1.0, такие как исправления ошибок, изменения размера экрана и добавленные функции, например, редактор строк и проверка синтаксиса. Также подробно рассматривается распределение памяти и дается руководство по использованию функций редактора и компилятора.
  • Примьера - STS
    Описание Riff Tracker MOD-редактора для General Sound, его возможностей и функциональности. Подробные инструкции по редактированию и управлению сэмплами. Указаны ограничения текущей версии и ожидаемые улучшения.
  • Примьера - Paul Atrides, Alex Noman
    Презентация Oberon Creative Pack, состоящего из ZX-WinWord и Sprite Cutter. ZX-WinWord — текстовый редактор, совмещающий текст и графику с расширенными функциями. Sprite Cutter позволяет создавать и обрабатывать спрайты в различных форматах.
  • Примьера
    Презентация второй демоверсии игры Headball от ZX-Masters, обсуждение ее особенностей и улучшений с момента первой демки. Игра предлагает режим для двух игроков, четыре уровня, три типа снарядов, различные опции и настройки сложности компьютера. Наличие Turbo режима и улучшенная синхронизация и анимация делают ее уникальной среди других игр для Spectrum.
  • Интервью - Ruster
    Интервью с Digital Reality о текущих проектах, таких как DOOM и Paradise Lost. Обсуждение проблем и прогресса в разработке игр. Предварительный просмотр их представлений на мероприятии ENLiGHT.
  • Интервью - Ruster
    Интервью с участниками недавно сформированной группы EXTREME. Они работают над демо для платформ Spectrum и Amiga и обсуждают своих участников и деятельность. Интервью также касается состояния сцены Amiga в Москве.
  • Интервью - Борис Прытков
    Интервью с самарскими энтузиастами Spectrum о достижениях и вызовах. Акцент на развитие сообщества и выпуск журнала Oberon. Усилия по созданию сети Spectrum и конвертации игры WALKER.
  • Интервью - Борис Прытков
    Статья представляет собой интервью с членами группы Flash inc., обсуждающими свои проекты для ZX Spectrum и PC, включая музыкальный редактор с инновационным интерфейсом и новый мультиколорный графический редактор.
  • Интервью - Михаил Акимов
    Интервью с московской группой Progress, обсуждение их текущей работы над демо для Spectrum, планов на будущее на Amiga и мнения о российской демосцене.
  • Интервью - Михаил Акимов
    Интервью с Феликсом об изменениях в технологическом ландшафте, о стойкой привлекательности Amiga несмотря на доминирование PC и его работе над 'Винни Пух - 2' для Spectrum.
  • Интервью - Ruster
    Интервью со Slash о мероприятии ENLiGHT, включая вопросы спонсорства, поведение участников и качество музыки и демо. Обсуждение текущего состояния рынков Spectrum и Amiga. Комментарии о музыкальных трекерах и будущем аппаратного развития.
  • Интервью - Ruster
    Интервью с В. Медноноговым после ENLiGHT'97, обсуждение впечатлений от события, будущее Spectrum и его текущий проект 'Чёрный Ворон'. Медноногов делится своим мнением о новом оборудовании и разработке ПО, а также о важности авторских прав. Он также обсуждает свои планы на будущие проекты и проблемы, с которыми сталкивается в разработке игр.
  • Здесь был ты
    Сатирическое руководство по обретению власти и невидимости с помощью магических ритуалов и жевательной резинки Orbit.
  • Здесь был ты - Saggitarius
    Созерцательная новелла о существующем пути человека после встречи с загадочным человеком, предлагающим устройство, называемое Стоп-Краном. Через воспоминания главный герой размышляет о своей жизни, уникальности и желании вырваться из общественных ограничений. В конечном итоге он сталкивается с моральной дилеммой использования Стоп-Крана для преодоления времени и существования.
  • Почта - Eagle Soft
    Критика программного обеспечения ZX-Spectrum, выделение ограничений текущих программ и рекомендация удаления устаревших инструментов. Обсуждение ограничений ассемблерных программ и необходимость более эффективных ассемблеров, таких как M80. Оценка текущих музыкальных и графических редакторов, с акцентом на избыточность некоторых приложений.
  • Почта
    Обсуждение вопросов читателей о распространении и содержании ZX Format. Ответы включают информацию о приобретении номеров и технические сведения о компьютере KAY-256. Журнал также отвечает на критику статьи о рынке.
  • Почта
    Реклама освещает кампанию по распространению программного обеспечения XL Design Inc., предлагая игры, такие как 'Плутония', и готовящиеся к выпуску, например, 'Mortal Kombat'. Контроллеры мыши рекламируются с юмористическими акцентами и деталями цен. Студия ЛОГРОС предлагает широкий ассортимент программного обеспечения и периферии с возможностью локальных и удаленных покупок.
  • Разное - Александр Сысоев
    Обсуждается создание RPG-игры группой OBERON, вдохновленной 'Eye of Beholder'. Описан юмористический сюжет игры, действие которого происходит в далекой галактике, и борьба с захватчиками на планете Агима. Группа приглашает музыкантов, художников, кодеров и сценаристов для совместной работы.
  • Разное - Viator
    Описание разработки нового графического редактора под названием STATE OF THE ART для ZX Spectrum, направленной на улучшение существующих редакторов, таких как ART-STUDIO и ARTIST-2. Команда AVALON, вдохновленная отзывами сообщества художников SPECCY, включает функции редакторов на Amiga и PC, а также учитывает специфические запросы пользователей. Основные особенности включают удобный интерфейс, улучшенный режим увеличения, расширенные функции работы с фигурами и окнами, а также оптимизированную производительность.
  • Разное
    Обсуждение повышения потребительского качества компьютеров Spectrum без изменения их технических характеристик. Предлагаются улучшение существующей поддержки, разработка идеологии платформы и структурные изменения. Статья также затрагивает потенциал электронных книг и их коммерческую жизнеспособность.
  • Amiga Club - Максим Петров
    Статья описывает восхищение автора компьютером Amiga, подчеркивая его эстетические и технические достоинства по сравнению с другими платформами. Описываются программные опыты автора на Amiga, выделяя её эффективность и впечатляющие возможности новых аппаратных обновлений. В заключение статья размышляет об уникальном сообществе и увлеченности энтузиастов Amiga.