Теоретическа статья о возможности
    усложнить программирование под Z80
    посредством изъятия команды LD A,n


(C) sinn/dtr/fdm

                                      "Итак   вы,  возлюбленные,
                                      будучи  предварены  о сем,
                                      берегитесь,  чтобы  вам не
                                      увлечься заблуждением без-
                                      законников  и  не  отпасть
                                      от  своего утверждения, но
                                      возрастайте  в благодати и
                                      познании  Господа нашего и
                                      Спасителя  Иисуса  Христа.
                                      Ему  слава и ныне и в день
                                      вечный. Аминь"
 
                                              2-е Петра, 3:17-18

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

  Представим, что из Z80 изъяли команду LD
A,n.  Представим,  что каким-то прекрасным
утром  мы  проснулись,  а  его  в  Z80  не
обнаружили. Или, мы нарочно вводим это ог-
раничение.  Корни  появления нам не важны,
важны последствия. Вот о них и поговорим.
  Рассмотрим,     насколько     усложнится
написание   программ  под  Z80  (почему  я
уточнил,  что  именно  под Z80? Потому что
извлечение  команды  никак  не повлияет на
написание  программ  в ассемблере под i86,
PCC).
  Решений  для данной проблемы можно найти
несколько. Я постараюсь описать несколько,
остальные оставлю Вам.

              Первое решение

  Что сразу приходит на ум, так это полный
отказ   от   прежнего   стиля   написания.
Придется  писать  программы  по-новому,  с
новым  подходом, с новым стилем. По-началу
будет     конечно     трудно,     появится
психологические  барьеры,  фобии,  которые
могут   пагубно   отразиться   на  психике
кодеров. Эти проблемы скорее всего обойдут
стороной  начинающих,  ибо их разум еще не
"замутнен"    старыми   стилями,   старыми
методами.  Именно  на них и возложется вся
надежда. Каков будет "новый стиль"? Сложно
конечно сказать, я даже не могу себе этого
представить. Вполне возможно, что придется
вообще забыть о регистре A, как о таковом.
Придется  обходиться  без него. К примеру,
чтобы  сбросить  флаг  переноса,  придется
применять следующий прием:

 PUSH BC        ; сохраняем регистровую
                ; пару, так как используем
                ; для установки флага
                ; переноса регистр C, но
                ; если вам не нужно
                ; содержимое BC, то можно
                ; этой операции и не
                ; производить, естественно
                ; не нужно будет его и
                ; восстанавливать
                ; (см. ниже)
                ; впринципе, вместо BC
                ; можно будет использовать
                ; и другой 16-разрядный
                ; регистр
 LD C,%00000000 ; сброс флага переноса
 PUSH BC        ; C =>
 POP AF         ;      F
 POP BC         ; восст. рег

 Сравнения:

 XOR A  =  PUSH BC
           LD C,%00000000
           PUSH BC
           POP AF
           POP BC

  Как     видите,     увеличится     объем
используемой памяти, увеличится количество
тактов.
  Так  как при данном решении проблемы так
называемого  "изъятия"  мы отказываемся от
регистра A (хочу сказать, что мы не сможем
полностью  отказаться  от  регистра A, так
как нам будет нужна команда PUSH AF, а так
же  противоположная  ей  команда  POP  AF,
причина  здесь  одна  -  нам  нужен  будет
доступ к флаговому регистру F. Но если вас
это задело, то откажитесь и от этих команд
это  будет более смелое решение), то мы не
сможем  использовать  и команды CPIR, CPI,
DAA,  а  так  же другие (см. справочник по
командам  Z80).  Для этого придется писать
свои  процедуры,  делать их по возможности
быстрыми,  чтобы  они так же занимали мало
места.
  Как  можно  заметить,  полный  отказ  от
регистра    A    ведет   к   максимальному
усложнению  программирования  под  Z80 при
изъятии команды LD A,n.

                Второе решение

  Это решение является более рациональным,
в  отличии от выше описанного решения, так
как   оно   не   требует  "переосмысления"
программирования   под  Z80.  Здесь  можно
использовать  старые  методы  кодинга,  не
отказываться     полностью     от    своих
алгоритмов.  Но.  Есть  одно  "НО". Нельзя
использовать      команду      LD      A,n
непосредственно,   так   как   таковой  не
"существует".  Чтобы загрузить в регистр A
константу,  необходимо  провести  примерно
следующие действия:

 LD A,10 = PUSH BC           PUSH BC
           LD B,10  или так  LD B,10
           LD A,B            PUSH BC
           POP BC            POP AF
                             POP BC

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


               Третье решение
                    или
               решение "Микс"

  Третье решение является гибридом первого
и  второго решений. То есть, идет отказ от
_некоторых_  команд  регистра,  связаных с
регистром  A. К примеру, вводится отказ от
команд LD A,B, LD A,C.
  Так  что,  чтобы  занести  в аккумулятор
число  10,  придется  произвести следующие
действия:

 LD A,10 = PUSH DE
           LD D,10
           LD A,D
           POP DE

 Но нельзя будет сделать так:

           PUSH BC
           LD B,10
           LD A,C  ; ошибка, так как
                   ; отказались от
                   ; команды LD A,C
           POP BC


Вывод:
───═══

  Первое   решение  гораздо  сложнее  всех
остальных,  рассмотренных  в этом докладе.
Это    решение    максимально    усложняет
программирования   под   Z80  при  изъятии
команды LD A,n.

  Второе    решение    самое    легкое   и
элемнтерное   из  рассмотренных  в  данном
докладе.    Оно   минимально   усложненяет
программирование   под   Z80  при  изъятии
команды LD A,n.

  Третье  решение  среднее по сложности из
рассмотренных    в   моем   докладе.   Оно
находится   по   степени  сложности  между
первым  и вторым решениями. По своей сути,
оно   является   идеальным  вариантом  при
решении проблемы изъятия команды LD A,n из
процессора  Z80, так как вы _сами_ сможете
решать   от   какой   команды   вам  стоит
отказаться.   Но  здесь  надо  быть  очень
внимательным.  Если  вы откажитесь от всех
команд   (ведь  из  условия  "Микс"  можно
отказаться от _любого_ количества команд),
то   третье   решение  трансформируется  в
первое  решение.  Вывод  -  решение один и
решение  "Микс"  (третье  решение) связаны
между  собой, что доказывает гибридность с
первым решением. Так же, если мы откажимся
только  от  команды  LD  A,n,  то  получим
второе   решение,   что  так  же  является
доказательством   гибридности   со  вторым
решением.

Резюме:
───═══

  Ввиду  появления  проблем  при написании
программ  на  ассемблере  Z80,  вследствии
изъятия  команды LD A,n из процессора Z80,
ее изьятие не рекомендуется, хотя, если вы
принципиально  откажитесь от этой команды,
то  можете  стать  первоначальником нового
течения  в  программировании. Сможете даже
дать  этому  течению  свое название - ведь
его   нет,   а   значит  нет  и  названия.
Придумать  сейчас  что-то новое становится
все  труднее  и  труднее  - прогресс ведь,
господа. Ловите момент!



Other articles:


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

Similar articles:
Web - On the pages of Spectrum online.
Let's laugh - The results of the competition answer the questions. Competition for the funniest anecdote, case of life. 25 jokes from the publisher.

В этот день...   21 November