Polesse
#03
06 марта 1999 |
|
Ассемблер - Запись чисел, пересылка числа в регистр, запись числа в регистровую пару, скролирование экрана, установка вывода на экран, очистка экрана.
┌──────────────────────────────────────────────────────────────┐ │ ████▓▓▓▓▒▒▒▒░░░░ АССЕМБЛЕР ДЛЯ НАЧИНАЮЩИХ ░░░░░▒▒▒▒▓▓▓▓███ │ └──────────────────────────────────────────────────────────────┘ (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-е марта. |
переговорное устройство в квартиру |
Похожие статьи:
В этот день... 21 ноября