Polesse #03
06 марта 1999

Ассемблер - Запись чисел, пересылка числа в регистр, запись числа в регистровую пару, скролирование экрана, установка вывода на экран, очистка экрана.

<b>Ассемблер</b> - Запись чисел, пересылка числа в регистр, запись числа в регистровую пару, скролирование экрана, установка вывода на
 экран, очистка экрана.
┌──────────────────────────────────────────────────────────────┐
│ ████▓▓▓▓▒▒▒▒░░░░  АССЕМБЛЕР ДЛЯ НАЧИНАЮЩИХ  ░░░░░▒▒▒▒▓▓▓▓███ │
└──────────────────────────────────────────────────────────────┘

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

   Во  многих газетах и журналах есть подобная рубрика.  Однако,
когда я совершенно не знал  ассемблер и с удивлением  смотрел на
"простенькие" процедуры очистки экрана, мне пришлось  учиться  с
помощью других источников. Я и сейчас еще плохо кодирую,  но для
некоторых следующая статья покажется интересной и полезной.
   Прежде  всего,  Вам  понадобиться  специальная ассемблирующая
программа (или пакет программ), иначе называемая просто - ассем-
блер. Я пользуюсь ZX ASM-3, но, естественно, можно взять и любой
другой. К этому вопросу мы еще вернемся.
  У  нашего  любимого  Speccy есть несколько пар регистров.  Вот
основные  из  них:  AF,BC,HL,DE.  Вы  можете  использовать их по
отдельности, или в парах, причем именно так,  как  написано выше
(Совершенно недопустима запись: AH,DL или BE).  Они  служат  для
хранения чисел.  Эти регистры являются восьмибитными.
  Например, в рег. 'В' можно  записать число, которое в двоичной
системе не превышает восьми знаков, то есть можно записать число
"98" (в двоичной системе исчисления - это %1100010,  число нули-
ков и единичек не превышает восемь),  но  нельзя  записать число
350 (в двоичной системе счисления - %101100010,  количество раз-
рядов-9 ). Вообще,  самое большое число,  которое можно записать
в регистр - это 255 (%11111111).
   Также можно записывать и большие числа,   но уже не в регист-
ры, а  в регистровые пары  (AF,BC,HL,DE). Эти  регистровые  пары
уже шестнадцатибитные и самое большое число, которое можно запи-
сать в них - это те числа,  которые в двоичной системе не превы-
шают шестнадцати разрядов. Самое большое число-65535.
   Самой  простейшей  операцией на ассемблере является пересылка
числа в регистр. Для этого служит мнемоника 'LD'. Например:

   LD     A,5   ; записываем в регистр "А" число "5"

   Эта  программа запишет в регистр 'A' число '5'.  Однако, если
Вы запустите  эту  програмку  (для этого нужно программу сначала
проассемблировать, а потом запустить),  то Ваш комп почти навер-
няка  зависнет.  Для того, чтобы этого не происходило Вам  нужно
после всей  програмки  поставить  команду  'RET' (возврат),  это
даст компьютеру повод вернуться обратно в ассемблер или в интер-
претатор бейсика.
   Теперь наша программка выглядит так:

   LD     A,5  ; записываем в регистр "А" число "5"
   RET         ; возвращаемся

   Обратите внимание!  Текст, стоящий после знака ";" называется
комментарием к программе.  К выполнению  самой  программы  он не
имеет  никакого отношения и программой-ассемблером игнорируется.
Комментарии вводятся в текст исключительно ради удобства и чита-
бельности программы.  Например, программисты  часто снабжают ис-
ходные  тексты своих программ комментариями,  чтобы спустя время
не приходилось мучительно вспоминать ее алгоритм.  В ассемблере,
знак ";" можно уподобить оператору 'REM' языка Бейсик - все, что
находиться за ним - не обрабатывается транслятором. Это свойство
комментариев можно эффективно использовать при отладке программ,
исключая из выполнения отдельные команды и целые процедуры.
   Но я отвлекся...

   Для того, чтобы записать число в регистровую пару, можно тоже
воспользоваться мнемоникой 'LD':

   LD     HL,1998   ; записываем регистровую пару "HL" - "1998"
   RET              ; возвращаемся

   Ну а теперь Вам,  наверное  хочется увидеть что-то на экране.
Начнем с простого. Наверное, самой  первой  Вашей  программой на
Basic'е была программа вывода на экран какого-нобудь  слова.  Ни
чем  не  сложнее  это сделать на ассемблере.  Хотя,  можно такую
програмку загнуть...  Но  мы воспользуемся Basic'ом,  в принципе
нe самим, а лишь его подпрограммой. Эта подпрограмма находится в
ПЗУ под адресом 16. (Шестанцатеричный адрес - #10).
   Для того,  чтобы обратиться к какой-нибудь подпрограмме в па-
мяти  можно воспользоваться мнемоникой 'CALL', после которой не-
обходимо указать адрес, то есть номер ячейки пямяти с которого в
ПЗУ хранится подпрограмма печати символа. Например, из ассембле-
ра можно вызвать подпрограмму ПЗУ - "скроллирование экрана":

   CALL   3582   ; обращаемся на адрес 3582.
                 ; (равносильно "RANDOMIZE USR 3582")
   RET           ; возвращаемся

   Но вернемся к выводу на экран.  Для того чтобы что-то напеча-
тать,  необходимо  передать подпрограмме необходимые данные, на-
пример:  какой именно символ печатать.  Для  этого воспользуемся
регистрами, а точнее регистром 'A'.  В  него нужно  записать код
символа,  который нужно напечатать, но сначала нужно указать по-
ток  вывода  (экран, принтер, служебное окно или еще чего).  Для
этого воспользуемся подпрограммой ПЗУ под адресом 5633, при этом
перед обращением на адрес 5633, нужно в регистр 'A' занести  но-
мер потока (2-основной экран, 3-принтер). Например, для установ-
ки вывода на экран:

    LD    A,2    ; устанавливаем вывод на экран (поток-2)
    CALL  5633   ; вызов подпрограммы установки потока
    RET          ; возвращаемся

   Обратите внимание! Регистр 'А' - самый важный регистр процес-
сора.  Его часто называют аккумулятором,  т.к. именно с участием
этого регистра осуществляется большинство математических и логи-
ческих операций ассемблера.

   Сейчас  самое время научиться выполнять процедуру очистки эк-
рана.  Благо  в памяти  нашего Speccy  есть и  эта подпрограмма.
Например, вот как будет выглядеть эта процедура на ассемблере:

   CALL   3435   ; это адрес подпрограммы очистки экрана в ПЗУ.
   RET           ; возвращаемся

   Теперь мы умеем устанавливать потоки и очищать экран,  значит
можно попытаться что-то вывести:

   CALL   3435    ; очищаем экран
   LD     A,2     ; заносим в аккумулятор номер потока
   CALL   5633    ; устанавливаем поток
   LD     A, "*"  ; в рег. 'A' заносим символ '*'
   CALL   16      ; вызов подпрограммы печати
   RET            ; возвращаемся

   Вместо 'CALL 16' можно писать 'RST 16'. RST - это команда пе-
рехода на строго фиксированный адрес, (например не допустима за-
пись "RST 17"), которая и в памяти занимает меньше байт и выпол-
няется быстрее.
   Вместо символов в аккумулятор можно заносить и коды этих сим-
волов, без кавычек. Например, если подставить в четвертую строку
нашей программы: "LD A,65" - на экране появиться буква "А",  т.к
65 - это десятичный код буквы "А".
   Теперь,  как я и обещал,  поговорим о программах-ассемблерах.
Если  у Вас  "Спектрум-48К"  - можно воспользоваться программами
типа GENS-3, GENS-4, ZEUS.  Владельцам же машин с памятью 128К и
выше повезло больше:  их вниманию  предлагается свыше около раз-
личных ассемблеров, основные различия между которыми  сводятся к
объему   предоставляемого  сервиса  и  некоторых  дополнительных
удобств, как-то скорость ассемблирования и т.п.
   Начинающим кодерам вполне подойдут ассемблеры:  TASM, ZX-ASM.
Более продвинутые пользователи по достоинству оценят XAS, ALASM,
STORM.  Вообще, выбор конкретной ассемблируещей программы сугубо
индивидуален - это скорее дело вкуса.  Позднее, набрав необходи-
мого опыта, можно будет попробовать различные ассемблеры,  найдя
"свою" программу, работа в которой будет приносить удовольствие.
   Как правило наряду с ассемблерами Вам понадобятся и программы
дизассемблеры (мониторы-отладчики).  Среди множества таких прог-
рам, заслуженной популярностью пользуется монитор STS.  Он неза-
меним при взломе, отладке, трассировке, содержит богатые сервис-
ные возможности. Подробный разбор этих и других средств мы оста-
вим на следующие выпуски.

   До встречи в следующем номере!






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

Ассемблер - Запись чисел, пересылка числа в регистр, запись числа в регистровую пару, скролирование экрана, установка вывода на экран, очистка экрана.

В паутине - График работы городских серверов.

Конкурс - Лучшая дема на бейсике.

Навезли новья - Обзор новинок ПО: Sex Minesweeper, The Puzzle, Leprekon, Fields of Logic, Kick da Gaga, Orion.

Рек-тайм - Реклама и объявления ...

Слабо пройти - Описание-прохождение игры Monstrland (миссия 4).

Слово авторов - Близится 8-е марта.


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

Похожие статьи:
Железо - DMA.
Статья 1 - о будещем спектрума и причинах популярности IBM PC.
ANOTHER WORLD - О компьютере Be Box.
Paradox 2000 - отчет Касика с поездки на Paradox'2000.
Программирование - Загрузчик для рабочей дискеты.

В этот день...   19 апреля