Odyssey Magazine #01
05 марта 1997

Ассемблер - Как вычислить синус на ассемлере.

<b>Ассемблер</b> - Как вычислить синус на ассемлере.
   Как вычислять синус на ассемблере ?


 Phantom Lord (С) 1997
 Music by SHOV


 Наверное многие заметили, что практичес-
ки  все эффекты состоят из объектов изме-
няющихся или движущихся по некоторым тра-
екториям, по синусу. Многие конечно могут
возразить, что существуют эффекты, меняю-
щие свою форму или координаты вовсе не по
синусу.  На что я могу лишь ответить: "Вы
не  правы,  молодой человек!". Как сказал
один очень хороший ученый:

         Всякое функциональное отношение
         можно  выразить  через  функции
         синуса и косинуса.

  Но  мы  же  -  математики  и знаем, что
sin(x)=cos(x-pi/2),  поэтому  фразу можно
переделать так:

         Всякое функциональное отношение
         можно  выразить  через  функцию
         синуса.

          (C) Phantom Lord


  Вернемся  к  теме.  Итак нам надо иметь
синус. Зададим его с уровня Бейсика.

 10 let adr=49152
 20 for n=0 to 2*pi step pi/128
 30 poke adr,sin (n)*127
 40 let adr=adr+1
 50 next n


  В  итоге мы получим таблицу длинной 256
байт.  Каждое  значение  таблицы является
одним из значений функции sin (n)*127. Мы
умножили  sin (n) на 127, чтобы увеличить
его   область   значений   с   [-1,1]  до
[-127,127]. Теперь если брать значения из
таблицы  строго  по  порядку,то  мы будем
брать  последовательные  значения функции
sin (n)*127.

 Напишем  программу  изменяющую по синусу
цвета атрибутов экрана.


AGAIN    EI
         HALT
         CALL INC_SIN
         CALL SIN
         CALL IZM
         LD A,#7F
         IN A,(#FE)
         AND 1
         JR NZ,AGAIN
         RET


INC_SIN  LD A,0
         INC A
         LD (INC_SIN+1),A
         RET


SIN      LD A,(INC_SIN+1)
         LD L,A
         LD H,#C0
         LD A,(HL)
         RET


IZM      LD HL,#5800
         LD DE,#5801
         LD BC,767
         LD (HL),A
         LDIR
         RET



  Процедура  INC_SIN позволяет нам пробе-
жать  по всей таблице, так как всего зна-
чений 256, а при увеличении 255 на едини-
цу  получаем  снова 0, т.е. элемент, при-
надлежащий  множеству  определений  нашей
функции. Это условие называется периодич-
ностью функции синус.

 Процедура SIN выбирает из таблицы синуса
следующее значение, а IZM заполняет атри-
буты экрана выбранным значением.

      Переход от "чистого" синуса к
       некоторым сложным функциям.

 ABS(SIN(X)) - модуль синуса.


  Из  курса  математики  средней школы вы
наверное знаете, что функция модуль сину-
са  периодичная  с периодом PI. Расмотрим
отрезок  от сужения функции SIN(X) на по-
луотрезке  [0,PI/2). Нетрудно подметить,
что  в этом случае функции совпадают. На-
пишем   программу  расчитывающую  функцию
ABS(SIN X) исходя из выше изложенных рас-
суждений:

A_1      CALL SIN_INC
         CALL SIN
         JR A_1
 
SIN_INC  LD A,0
         INC A
         AND 127
         LD (SIN_INC+1),A
         RET


SIN      ...


 Как видите после команды INC A мы поста-
вили AND 127, тем самым ограничив значе-
ния SIN только на положительные числа ,
т.е. на ABS(SIN(X)).

 -ABS(SIN(X))


 Очевидно, что если проделывать аналогич-
ные  рассуждения, то мы получим программу
сходную  с  предыдущей  и отличающуюся от
нее только подпрограммой SIN_INC:

SIN_INC  LD A,0
         INC A
         AND 127
         ADD A,128
         LD (SIN_INC+1),A
         RET
 
 Теперь может возникнуть вопрос :

     А что это даст нашим программам ?


  Это  придаст вашей программе реалистич-
ность. Скажите, на что приятней смотреть,
на  прыгающий  по всем законам физики мяч
или  на  маячущую  вверх-вниз  физическую
форму ?

 Решать вам.

__________________________________________



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

Вступление - Oб авторах журнала и о журнале.

Вступление - Oб авторах журнала

Вступление - Инструкция к оболочке журнала.

Отдохнем - GLODING PROGRAMMING (Программирование снизу вверх наискосок)

Ассемблер - Как вычислить синус на ассемлере.

Система - IBM:Об алгаритме сжатия Lempel-Ziw Welch и его реализации для формата GIF.

Разное - о компьютерных проблемах: ПРОФИ и СКОРПИОН, IBM...

Отдохнем - "Приколы со стороны".

Деморынок - Хит-парад музыкальных демонстраций.

История - Хакеры - статья "ОНО" - об истории появления хакерства.

История - Классификация хакеров.

Отдохнем - "Как ломаются полуоси?".

Письма - Отзывы читателей о журнале.

Конкурс - Конкурс на лучшую головоломку !

Ассемблер - Быстрый расчет адреса по двум координатам.

IS DOS - Проблемы и решения

Новости - новости города.

Разборка - Описание игры THE DOOBLE.

Разборка - Описание игры BLOOD WYCH.

Обзор - новые игры: RETURN TO HOME 4, CITADEL, KLADEMINER, BRIDGE PLAYER, CRUSHER, AMERICAN TURBO KING, RAD RAMP RACER, KUNG FU MASTER, CHOY LEE, SIDERAL WAR, ARKARUM, DIRT TRACK RACER, DOUBLE DRAGON 2, NIGHT BREED, THE CYCLES, MOONTORC, KOMMANDO 2.

Система - Описание системных программ : UNIVERSAL SPRATE STUDIO (USS)

Гости - Старые знакомые:О истории создания краснодарской группа UNIT-5

Система - Описание системных программ : ACCEPT PROTECTION SYSTEM V1.0.


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

Похожие статьи:
От авторов - первый выпуск новой электронной газеты "SHOKER".
Ликбез - полное описание + полный дизассемблер ПЗУ (часть 4).
Презентация - Авторские программы: ОСЕЛ

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