Polesse #10
04 сентября 1999

Ассемблер - Регистры SP, PC, R, IX, IY, OUT-IN.

<b>Ассемблер</b> - Регистры SP, PC, R, IX, IY, OUT-IN.
┌──────────────────────────────────────────────────────────────┐
│ ████▓▓▓▓▒▒▒▒░░░░ АССЕМБЛЕР ДЛЯ НАЧИНАЮЩИХ  ░░░░▒▒▒▒▓▓▓▓█████ │
└──────────────────────────────────────────────────────────────┘

(C) THINKER
───────────

   Привет,  всем тем, кто хочет научиться программировать на ас-
семблере Zx-Spectrum!
   Сперва скажу,  что рассказал Вам еще не о всех регистрах мик-
ропроцессора. Есть несколько о которых Вы не знаете, а также до-
полнительный набор... Но обо всем по порядку.

╔──────────╗
│Регистр SP│  Здесь  хранится  адрес,  по  которому  расположена
╚──────────╝  вершина стека. При выполнении  "PUSH xx", этот ре-
гистр уменьшается на 2.  Если перейти  к  какой-нибудь процедуре
(CALL xx)  и потом в ней изменить SP, то измениться и адрес вер-
шины стека и из подпрограммы Вы уже нормально не выйдите.  Заме-
чу, что при выполнении "POP xx", SP увеличивается, и тоже на 2.

╔──────────╗
│Регистр PC│  Этот шестнадцатибитный рег. еще называют счетчиком
╚──────────╝  команд. В нем находится адрес выполняемой в данный
момент команды.

╔──────────╗
│Регистр  R│  Вообще,  этот рег. используется аппаратно, для ре-
╚──────────╝  генерации  памяти,  но  его можно использовать и в
своих программах.  Дело в том, что после каждой операции, значе-
ние хранящееся в нем увеличивается на 1 и дойдя до значения 127,
обнуляется.  Его можно использовать, как генератор псевдослучай-
ных чисел.

╔──────────╗
│ Индексные│  Очень  полезная вещь.  Их  можно использовать, как
│ регистры │  обычные рег. пары, но это не все.  Вам приходилось
│ IX и IY  │  применять на Бейсике комбинацию типа  perem+10 или
╚──────────╝  perem+x? Tакую возможность предоставляют IX и IY в
ассемблере.   Допустим нам нужно в рег. A занести число, которое
храниться  по адресу perem+10.  Как это сделать, ведь нельзя на-
писать HL+10 или BC+10. Но можно написать IX+10 и IY+10! Вот так
это выглядит:

       LD    IX, PEREM     ; заносим в IX число PEREM
       LD    A, (IX+10)    ; заносим в A число, которое хранить-
                           ; ся по адресу PEREM+10.  Замечу, что
                           ; PEREM-это любое число

   Теперь о дополнительном наборе.  Кроме  основных  регистровых
пар (AF,HL,BC,DE), есть еще и другие, которые ничем не отличают-
ся.  Итак, существует два основных набора регистров, между кото-
рыми можно переключаться. В микропроцессоре есть два регистра A,
две рег. пары HL, две BC, две DE,  которые совершенно не зависят
друг от друга.  Неактивный  в  данный момент набор рег. называют
альтернативным. Записать что-нибудь в неактивный рег. невозможно
без  переключения набора. В то же время,  определить программно,
какой  же  набор  регистров активен в данный момент, нет никакой
возможности.
   Альтернативные  регистры микропроцессора обозначаются следую-
щим образом: A', B', C'... и т.д. Апостроф после имени регистра,
указывает на его принадлежность альтернативному набору.
   Переключения между набором HL,DE,BC, осуществляется с помощью
команды EXX. Переключение между активной AF и альтернативной AF'
осуществляется командой EX AF,AF'. Рег. IX,IY,SP,PC,I,R не пере-
ключаются, у процессора они в одном экземпляре...

   Составим таблицу регистров Z80:

                                ╔═════════════════════════════╗
   А сейчас, давайте попракти-  ║                             ║
куемся  в  написании программ.    ┌───┬───┐    ┌───┬───┐
Задание:  заполнить   атрибуты    │ A │ F │    │ A'│ F'│
случайными числами. В качестве   О├───┼───┤   Д├───┼───┤
генератора случайных чисел ис-   С│ H │ L │   О│ H'│ L'│
пользуйте регистр R. Как всег-   Н├───┼───┤   П├───┼───┤
да, попробуйте  найти  решение   О│ B │ C │   О│ B'│ C'│
самостоятельно,  а если не по-   В├───┼───┤   Л├───┼───┤
лучилось, вот ответ. Напомина-   Н│ D │ E │   Н│ D'│ E'│
ем адрес области атрибутов ра-   О├───┴───┤   И└───┴───┘
вен #5800.                       Й│  I X  │   Т         
                                  ├───────┤   Е         
    LD   HL,#5800                Н│  I Y  │   Л         
MET LD   A,R                     А├───────┤   Ь         
    LD   (HL),A                  Б│  S P  │   Н         
    INC  HL                      О├───┬───┤   Ы         
    LD   A,H                     Р│ I │ R │   Й         
    CP   #5B                      ├───┴───┤             
    JR   NZ,MET                   │  P C  │             
    RET                           └───────┘             
                                ║                             ║
   Теперь некоторые пояснения:  ╚═════════════════════════════╝
Сначала, мы засылаем в аккуму-
лятор рег. R, а потом  бросаем его в экран.  Зачем?  Дело в том,
что у Z80 нет команды LD (HL),R.  Поэтому  и пришлось задейство-
вать аккумулятор (рег. А).  Дальше мы проверяем в HL адрес конца
экрана. Делается это следующем образом: конец экрана - это #5B00
(23296),  значит если HL=#5B00, то Н=#5б, а L=#00. Вот мы и про-
веряем, равно ли H #5B или не равно. Если не равно, то повторяем
цикл, иначе - выходим.
   Теперь проделайте тоже самое самостоятельно, но заполняйте не
атрибуты, а пиксели. Напомню, что начало экрана - #4000, а конец
это - #5800.
   С регистрами разобрались.  Теперь  не помешает  еще несколько
новых мнемоник.

╔──────╗
│OUT IN│ Эти  мнемоники  аналогичны  командам Бейсика  OUT и IN.
╚──────╝ С их помощью можно отправить значение в порт (OUT), или
получить значение  из порта  (IN).  Эти команды используются при
работе  с внешними устройствами, когда  опрашивается клавиатура,
джойстик,  осуществляется  работа с диском...  Как Вы, наверное,
знаете, бордюр тоже устанавливается через порт.  Порт магнитофо-
на, динамика и бордюра - это порт 254 (#FE). Через него осущест-
вляется работа и с клавиатурой.

   Значение битов порта 254 (#FE):

          ┌─┬─┬─┬─┬─┬─┬─┬─┐    ■ - не используется
          │■│■│■│S│M│B│O│R│    S - динамик
          └─┴─┴─┴─┴─┴─┴─┴─┘    M - магнитофон
                               BOR - 3-х битное значение бордюра

   Надо сказать,  что эти значения работают только на запись, на
чтение - они другие.
   Теперь мы можем устанавливать цвет бордюра.  Для этого, нужно
заслать в порт 254 номер цвета.

           LD    A,7       ; установка
           OUT   (254),A   ; белого
           RET             ; бордюра

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

   Ну что, на сегодня хватит?  Оставляем  Вас переваривать полу-
ченную информацию. До новых встреч на страницах "Полесья".





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

Ассемблер - Регистры SP, PC, R, IX, IY, OUT-IN.

В паутине - Третья общегородская поитовка.

Лаборатория - Глюк о цветной графике.

Навезли новья - Обзор новинок ПО: Справочник радиолюбителя, Англо - Русский словарь.

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

События, факты - Куда катится сцена, или глас вопиющего.


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

Похожие статьи:
Введение - начиная издавать эту газету, мы расчитывали на то, что газета сможет помочь пользователям компьютеров г.Чайковский поддерживать связь.
ZIP - приложение к газете.
Страница пользователя - Ночные размышленя о BBS.

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