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-е марта.


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

Похожие статьи:
СС'4 - Sq: отчет о Chaos Constructions 2004.
ZX arts scene - обзоp лyчших гpафических pабот, кто как и почему рисует.
Музыкальная шкатулка - несколько приемчиков при написании музыки на AY 8910.
Telefon bazar - самые прикольные и не только телефонные разговоры !
Письмо №322 - Самарская обл, г Тольятти

В этот день...   1 января

SibNews #08, Woot! #01, Spectrum Magazine #01, ACNews #25, Psychoz #14, ACNews #14, Last 128 #08, Last 128 #06, Last 128 #05, Last 128 #04, Last 128 #03, Last 128 #02, Last 128 #09, Last 128 #3.5, Last 128 #8.025, Sinclair Club #05, Last 128 #M!R 01, Fantadrom #01, Buzz #20, Last 128 #01, DonNews #13, Nicron #120, Promised Land #01, Inferno #01, Marazm #25, Ultimathum #01, Marazm #21, Hooy Mag #02, KrNews #11, Marazm #22, Marazm #23, ZX Football 2000 #01, Codemania #01, Always #03, Bugs #02, IzhNews #08, Virtual Worlds #01, Listok #04, Scenergy #02, Flash Info #18, Marazm #16, Marazm #17, Zed #01, Balagan #02, ZX Format #08, ZX Power #03, Shock #01, Impulse #02, Deja Vu #03, ZX Club #08, ZX Club #06, Numberology #01, Marazm #13, Marazm #12, Marazm #14, Gorodok #02, Zodiac #01, Marazm #15, Deja Vu #07, Marazm #11, Deja Vu #07, Playboy #03, Crazy News #2, Crazy News #4, ZX Light #01, Crazy News #5, Playboy #02, ZX News #03, ZX Review #1-2, Read Me #02, Crazy News #3, Nicron #13, Read Me #01, Public Spirit #01, Faultless #06, Faultless #05, ZX Software #01, Stump #04, Speccy #07, Возраждение #0, Speccy #03, On-Line #17, Scene+ #01, Welcome Press #01, ZX Konig #04, Adventurer #01, Faultless #05, Faultless #04, Di Halt #01, Faultless #01, Playboy #01, Crazy News #1, Faultless #03, Pioneer #03, Sinclair Town #02, ZX Magazine #01, Eldorado #01, ZX Magazine #02, Spectron #01, ZX News #01, ZX Konig #02, 200 #W, Welcome Press #00, Dune #07, Subliminal Extacy #01, Subliminal Extacy #02, ZX Konig #01, Subliminal Extacy #00, Muchomor #01, Spectrofon #01, ZX Revija #02, Outlet #01, Outlet #1-3