ZX Spectrum
Game

Spectre-Mac-Mon

Oasis Software (Великобритания),

Автор:

Жанр: Программирование: Asm


Язык

  • Русский
  • English

Управление

  • Клавиатура(?)

Игроков

  • Один

Доступные версии

Неофициальное издание
Играть!
Неофициальное издание
Играть!

Доступные версии

Неофициальное издание
Играть!
Неофициальное издание
Играть!
  •  Описание (авт.пер.)
  •  Информация
Описание Spectre-Mac-Mon (автоматический перевод)

[Транскрипция Примечания: Это транскрипция пытается придерживаться

[Так строго, как можно ближе к оригинальному тексту.

[Это означает, что орфография, пунктуация и грамматическая [Ошибки не были исправлены. Там, где они находятся [Столкнулись (или, скорее, где я заметил их 🙂 или [Где я изменил оформление исходного текста для [Читаемость, я вставил пояснительные комментарии.

[ [Matt Радж, Уиклоу, Ирландия 11/2005

РЕДАКТОР ASSEMBLER

Введение Командные Описания Командные функции

Макроассемблера (SPECTRE-MAC)

Обзор Руководство пользователя Выражения Макроопределения Макросы с аргументами Константы Наборы констант Количество поддиапазоны Условный Ассамблея Аргумент Модификация Итерация и переменной Монтажник Terminating информация Создание библиотеки Генеральный Руководство пользователя Руководство по Параметры Директивы нагрузки Директивы Список Системные переменные Ошибки

СПЕКТР MONITOR (SPECTRE-ПН)

Загрузка Введение Команды в деталях Обзор команд

Microdrive версия

РЕДАКТОР ASSEMBLER

RUN для выполнения

ВВЕДЕНИЕ

ПРИЗРАК-MAC Editor / Assembler является профессиональный пакет написана для 48K Sinclair ZX-Spectrum Micro-компьютер. Редактор дает возможность создавать линии до 254 символов. Чтобы дать Вам слишком длинных строк редактор использует уникальную ‘сторона прокрутки’ центр. Быстрый вверх / вниз движение курсора может быть использована, даже в то время как в любом из режимов ввода текста. Это средство направлено на ускорение редактирование. Другие услуги включают в себя: найти строку, заменить строку, копировать блок, объединить файлы и многое другое.

С ассемблере, макро-команды могут быть определены с почти любой синтаксиса. Четыре количество баз доступны, шестигранной, десятичной, двоичной и восьмеричной. Условная сборка поддерживается с помощью заявления, такие как IF-END и IF-ELSE-END. Переменные петли могут быть изготовлены с использованием ПОВТОР-До и разбить команды.

ПРИЗРАК-MAC является программа 16K и занимает память от 6000h до A000h, с файлами в A000h.

Загрузка

Для загрузки Тип SPECTRE-MAC:

LOAD “”

Команда Описание

Общее правило, следует отметить, что в то время мигает курсор, вы всегда можете прервать с любой из команд, нажав CAPS SHIFT / EDIT (за исключением КОМАНД 0, 0 & W).

– Опять найти Эта команда будет искать следующее вхождение либо, строка вводится, когда в командной L (НАЙТИ), или первая строка вошел в то время как в командной H (REPLACE). Поиск начнется на линии под курсором, и будешь только в конечном если он находит правильный строку, или она не помещается в круглые достичь конец линии курсора. Если строка не может быть найден, то слова “НЕ НАЙДЕН” появится в строке состояния.

<Команда B>– Дно файла

После нажатия на экране будет мгновенно обновляется, чтобы показать концевую секцию настоящего текстового файла. Курсор устанавливается в верхней строке текста на экране.

– Изменить режим Все остальные команды являются неактивными, а в изменении (вставка) режиме, за исключением команд A (опять же), который может быть активирован нажатием СИМВОЛ SHIFT / А. В режиме изменения вы не ограничивается только экран, полный текст, но есть Доступ ко всей файле. Клавиши управления курсором будет по-прежнему дают вам поститься движение вверх / вниз без необходимости выхода из режима изменится.

Вкладки могут использоваться в обоих режимах ввода текста. Они вводятся для удобства, нажав СИМВОЛ SHIFT / SPACE. Вкладки полезны тем, что они отформатировать текст с минимумом памяти используется. Есть две вещи, которые вы должны помнить о закладках:

1. Вкладка должны быть полностью удалены, прежде чем она исчезнет,

2. Линии только полностью обновляется, когда вы оставите их.

Некоторые вкладки будет видно ошибаться, пока вы не переместите в другую            линия и предыдущая строка обновляется.

Перечень специальных клавиш представлен на рис. 1.0.

<Команда D>– Удалить линии

После того, как вступил тогда нужно ввести количество строк (от линии курсора) вы хотите удалить. Есть два исключения:

1. При вводе ‘*’ вместо ряд, вы будете стирать из линии курсора до конца файла.

2. Если есть блок текста, который вы хотите стереть, но не уверены в его длине, идти до конца блока и место на линии сразу после блока A ‘-‘ Character. Убедитесь, что это самый первый персонаж на линии. Теперь переходим к верхней части блока, типа ‘D’ с последующим ‘-‘ и нажмите клавишу ВВОД.

<Команда G>– Получить файл

Эта команда написана в основной для удобства. Текущее имя файла будет отображаться и вам будет предложено, хотите ли вы, чтобы изменить его. Далее вам будет предложено, хотите ли вы, чтобы загрузить файл или просто проверить его. Если есть ошибка в загрузке у вас будет набирать RUN повторно вводить.

<Команда H>– Помощь Режим

Если вы хотите узнать, какая из команд букв делает что без обратитесь к руководству, а затем нажмите ‘H’, а любой из командных клавиш. Очень краткое описание команды будет отображаться в верхней строке. Для выхода из этой команды, CAPS типа SHIFT / EDIT.

– режим вставки То же, что “Изменение режима» (Command), за исключением, что вместо того, чтобы писать от символов, вы пишете в промежутке между ними.

<Команда J>– Присоединяйтесь файлы

То же, что команды G (GET), за исключением, что файл будет загружен на конец данного файла.

<Команда K>– копы блок

Чтобы переместить блок текста, просто поместите разделители перед и после текста: например, “- ** 1” до, и “-” после. Эти разделители должны быть в начале каждой строки. Установите курсор туда, где вы хотите, чтобы блок должен быть скопирован (курсор не должен располагаться в любом месте внутри этого блока). Теперь просто введите команду K, а затем введите начальный разделители (например – ** 1) и нажмите клавишу ВВОД. В то время как текст был скопирован, он будет выведен на экран. Экран может появиться дезорганизованы во время этой операции.

[Комментарий: “разделители” должно быть “разделители” – MR]

<Команда L>– Найдите строку

Это будет сначала спросить: Где угодно / начать? Это относится к где строка должна быть найдены (либо в начале линии или в любом месте вдоль линии). Он будет установлен на А-nywhere при вводе, но если вы хотите найти что-то только в начале строки введите “S”, затем нажмите ENTER. Теперь введите строку и нажмите клавишу ВВОД. Есть два дополнительных средства, доступные:

1. Ввод “?” будет представлять любой символ.

2. Ввод ” *” будет представлять любое количество символов.

NB Это не должен быть введен в начале или в конце строки, потому что это неоднозначно. Если вы хотите, чтобы искать символ “”, то вы должны ввести два из них для представления одного (“\”).

– Установить рабочее пространство Если вы хотите рабочее пространство ассемблера для поставить после конца файла, то эта команда не обязательно должен быть использован. Чтобы установить адрес рабочего пространства, просто введите новое адресное и нажмите возвращения. Чтобы установить рабочее пространство к концу файла, тип ‘*’ вместо любому адресу.

<Команда P>– Печать файла

Это будет сначала спросить ли вы уверены, набрав выход будет ‘Y’ все символы от позиции курсора до тех пор, либо не достигает строку, начинающуюся с символа ‘-‘ или конец файла.

<Команда Q>– Выйти

Выйти спросит, хотите ли вы уверены, и если вы, вы сразу же вернуться в BASIC. Вы можете повторно войти в редактор, не теряя свой файл, введя RUN / ENTER.

<Команда R>– Заменить строку

Во-первых вам будет предложено: Стоп / Непрерывная? Непрерывный заменить бы заменить определенное количество строк с тем, что когда-либо требовалось. Режим СТОП позволяет увидеть то, что вы бы заменить и дает вам выбор, следует ли заменить или нет.

Формат очень простой: [разделители] Первая строка [разделители] Второй строкой [разделители] Количество заменить.

Разделителя может быть любой символ, который не появляется в одном из двух строк. Все разделители должны быть маленькие символы.

например / Строка для ЗАМЕНИТЬ / ЗАМЕНА STRING / НОМЕР ДЛЯ ЗАМЕНЫ

Количество должно быть введено в десятичной и может быть что-нибудь до 9999. Если вы хотите заменить все строки в файле, которые соответствуют, то вместо ввода номера, просто введите “*”. Заменить всегда начинается с линии курсора и заканчивается в конце файла.

[Комментарий: Опять же, я уверен, что “разделители” на самом деле относится к «разделители» – MR]

<Команда S>– Статус

Статус относится к левой части верхней строке, где вы можете дисплей позиция курсора вдоль линии или файла конце в шестнадцатеричном. Просто нажмите клавишу ‘S’, пока вы не получите желаемый статус.

<Команда T>– Top Of файла Это займет курсор и ‘экрана окно »в верхней части файла.

Команда W>- Написать файл

Как и команда G (GET), у вас есть возможность изменения имени файла перед сохранением.

<Команда Z>– Соберите файл

После нажатия ‘Z’ вы wil1 будет предложено ввести параметры в сборе (см ассемблера руководство пользователя). После того, как параметры вводятся нажмите ENTER.

Для рабочей см команды 0.

Рис 1.0 – Таблица показать функции командных которые могут быть использованы в то время как в изменении и вставьте режимах:

СИМВОЛ SHIFT То же, что командовать, но работает в смену и вставьте режимах.

CAPS SHIFT EDIT Выход из команды.

УДАЛЕНИЕ Вернитесь на одно место, чтобы положение пустым.

ENTER Это вызовет настоящий курсор линия переломить в курсор позиции.

Курсора влево Наведите курсор на один символ назад.

Курсор вправо Перемещение курсора передает один символ.

Курсор вверх Перемещение курсора вверх на одну строку. Если нажать и удерживать клавишу достаточно долго, курсор исчезнет и прокрутка будет осуществляться.

Курсор снова появится, когда клавиша отпущена (также курсор вниз).

Курсор вниз Перемещение курсора вниз на одну строку.

CAPS SHIFT Пробел Ясно линию от позиции курсора до конца строки.

СИМВОЛ SHIFT Вставить в соответствие вкладка.

СИМВОЛ SHIFT ENTER Удалить в последней позиции табуляции или, чтобы последний символ, кроме пробела.

Рис. 2.0 – Эта таблица дает краткое описание команд, доступных:

СНОВА Найти следующее вхождение ранее введенной строки.

В НИЖНИЙ Переместить в нижней части файла.

С ПОМЕНЯТЬ Изменить текст в файле.

D Удалить Удалить ряд линий.

G GET нагрузки, или проверить, файл ленты.

H ПОМОЩЬ Дает краткое описание команды в верхней строке.

Я Вставить в Вставить в текстовый файл.

J РЕГИСТРИРУЙТЕСЬ Присоединяйтесь двух ленточных файлы вместе.

К копы Копировать блок текста.

L НАЙТИ Найдите строку текста.

0 WORKSPACE указан новый адрес ассемблера рабочего пространства.

P PRINT Отправить файл с курсором, чтобы принтер.

Вопрос ВЫЙТИ возврат к основным.

R ЗАМЕНИТЬ Заменить одну строку с другой строкой.

S STATUS статус Переключить.

T TOP Показать верх файла.

W WRITE Сохранить файл на ленту.

Z СОБРАТЬ Соберите настоящий файл.

[Комментарий: “. Рис 1,0”, “. Рис 2.0” Подписи были изначально ниже таблицах, я переместил их выше ради удобства чтения. – Мистер]

Макроассемблера ОБЗОР

Есть много типов макроассемблера в настоящее время. Большинство из них предлагают “проводных” набор инструкций для конкретной машины и позволяют макросы должны быть определены в терминах этих инструкций. Это вполне разумно, как монтажники, как правило, используется на одной машине, чтобы генерировать код для этой машины, и встроенный в набор инструкций делает время снижение сборки. Так почему отойти от этой проверенном рецепте? Ну, это сборщик был задуман с двумя основными целями в памяти: Для того, чтобы собрать код для процессора, кроме хозяина. Для того, чтобы собрать код во время сопоставимы с монтажниками с проводными наборов инструкций. На наш взгляд, были реализованы оба эти цели.

Сборщик поставляется с готовым составленной библиотеки, определяющей опкоды Z80 (проводится в оперативной памяти для скорости в системах, отличных от диска).

Другие особенности, поддерживаемые этим ассемблере условны сборки и даже условные макро заявления, итерация директивы внутри макросов, доступ к определенным пользователем опции флагов, позволяющих простое переключение сборки без модификации исходного кода и обширной арифметических и логических выражения обработки.

Руководство пользователя

Это руководство предполагает знание обычного кода сборки.

Формат кода

Значительное свобода существует в формате файлов, приемлемых для этой ассемблере: Линии могут быть длиной до 254 символов. Но есть несколько основных условия, которые необходимо соблюдать, чтобы для того, чтобы сборщик знает, что код должен иметь в виду, это:

1) Этикетки / переменные могут появляться в любом месте вдоль линии, но если они не начинают в нулевой колонке, то они должны быть немедленно следует двоеточие (Если они не являются частью / или сформировать выражение).

2) Макро инструкции не могут появляться в нулевом столбце, как ассемблер путать их с этикетками.

3) Файлы должны быть прекращены по конец заявлении.

Основные примитивы: DB & EQU

Было выявлено ранее, что мнемонические набор Z80 не был построен в ассемблере, но были определены как макросы в терминах более примитивных инструкций. Рассмотрим теперь эти примитивы и определить их синтаксис.

1) Определить байт “DB”.

Это наиболее используемые примитивные в инструкции, установленные макроопределения (Взгляните на листинг макросов команд ISO!). Его работа состоит в том, чтобы генерировать один байт кода, представляющий значение выражения или списка выражений следующей его. Эти выражения должны давать значения между -256 и 255 включительно. Вот некоторые примеры использования и формы обучения Д.Б. и код он генерирует. (Это также демонстрирует выражении обработки возможности этого ассемблера, так смотрите раздел выражений для подробного описания этих объектов.)

0000 00 DB 0

0001 1234 OB 12H, 34H; Комментарий 0003 48454C4C 0007 4F205448 000B 45524521 DB “Здравствуйте!” 000F FE DB 11111111B – 1 0011 2C БД “H” -7o<< 2 0012 00010203 0016 04050607 DB 0,1,2,3,4,5,6,7 001A FF00FF DB 1<2, 5>20, “B”<* 42H ^ ^ ^ Программа ^ ^ Счетчик ^ кодекс как вошел в файл ^ Код генерируется по БД  инструкции

2) Этикетка приравнять “EQU”

Это утверждение так же, как и в других сборщиков и используется для установки меток на конкретных значений (которые не могут быть изменены – об этом чуть позже). Например:

234 ПОЛЕ: EQU 1234h AAAAA ИМЯ: EQU 1010101010101010B 0C8C $ TT_TT $: EQU 123 * 64-LABEL1 003F COLZERO EQU 77o; Этикетка в нулевой колонке ^ ^ Результат назначение ставится здесь

Обратите внимание, что “$” ы и “-” с разрешены в рамках имена меток. Этикетки могут быть любой длины, но только первые восемь символов являются значительными.

1) Выражения

Как уже говорилось ранее; это ассемблера поддерживает довольно обширные арифметические и логические способности. Эти средства не являются роскошью и широко используются позже в макроопределений. Алгебраическая логика поддерживается вложенности скобок и четырех счисления.

HEX например 1000H (база 16)

ДВОИЧНЫЙ например 10101111B (база 2) OCTAL например 57o (основание 8) ДЕСЯТИЧНАЯ например 65000 (база 10)

Также здесь приведен список операторов, их функций и precidence.

Оператор Precidence Использование функции

  + 5 + Унарное Плюс

  – 5 -А NEGATE   ! 5! Логическое дополнение

  >>4 A >>B Повернуть право B бит

  << 4<< B Повернуть влево B биты   * 4 * B Умножьте   / 4 / B Целочисленное деление   % 4% B по модулю B

  + 3 + B Добавление

  – 3-Б Вычитание

  & 2 & B Логическое И

2 A | B Логическое ИЛИ 2 ~ B Логическое XOR

  = 1 = B Тест равенство

  >1>B Больше   >= 1>= B Более или равно   <1

Precidence (относительной связи оператора) задается в виде числа от 1 до 5 – Где 5 указывает на высокую связывающую силу. Конечно скобки могут быть использованы для изменения порядка вычисления выражения.

[Комментарий: Операторы не указаны для логических или и логической операции XOR, я предполагаю, что это будет | и ~ соответственно. Также “Precidence” должна, конечно, быть “Приоритет”. – Мистер]

Этикетки и неопределенные значения

В предыдущем [Предшествующая – MR] раздел инструкции EQU было показано, что этикетки может быть установлен в значение выражения, и что выражение может содержать ссылки на этикетке. В таких ситуациях Ссылка должна быть к ранее приравнивается этикетке иначе значение по умолчанию нуля будет использоваться, то есть:

0000 LABEL1: EQU label2 * 100H 0002 label2: EQU 2

С каждой этикетке есть хранится флаг, который указывает, содержит ли метка совершенно правильное значение, это будет установлено верно во второй приравнивают но ложно в первой. Некоторые заявления, которые используют выражения проверить этот флаг и выдаст ошибку, если выражение содержится неиницализированные значение. Этот флаг распространяется, когда метка / переменная устанавливается в выражение, даже через макро аргументов (см раздел макросов с аргументами).

2) Макроопределения

Для непосвященных макрос представляет собой единую сущность, которая представляет собой ряд других инструкций, которые сами по себе могут быть макросы. Чтобы проиллюстрировать это дальше давайте теперь определить макрос.

DEFMAC (“макроса”); Это, как мы

; Определить имя макросов

DB 77o; Генерация байт ; Содержащий 77 восьмеричную ; Это, как мы в конце ; Определение макроса

0000 3F макроса; Это, как мы

; Вызвать макрос

END; конец исходного кода

Обратите внимание, что определение макроса не генерирует никакого кода, но когда макрос был вызван породила байт, содержащий 77 восьмеричную (3F шестнадцатеричное). Так Получается, что применение ранее определенного макроса собирает кода подарок внутри это определение макроса. Макрос может рассматриваться как процедур в некоторых языках высокого уровня (например, Паскаль), которые должны быть определены до их использования. Этот тип макроса имеет ограниченное применение, хотя, потому что это всегда порождает тот же код при вызове и в следующих разделах мы будем иметь дело с тем, как определять макросы, которые генерируют различный код при вызове по-разному, но это стоит посмотреть на то, как мы можем определять макросы, которые будут использоваться в качестве инструкции Z80 с этим типом макроса:

; Определения Z80 инструкции NOP & HALT

DEFMAC (“NOP”)  DB 00H КОНЕЦ

DEFMAC (“HALT”)

DB 76H

КОНЕЦ

0000 00 NOP

0001 76 HALT

КОНЕЦ

Кроме того, можно определить макросы, которые состоят из более чем одного слова, как в этом примере:

DEFMAC (“DO-ТРИ-NOPS”)

DB 00,00,00    КОНЕЦ

0000 000000 сделать три Nops

Хотя это тривиальный пример это иллюстрирует, как “-” ы используются для разделения слов в нескольких макросов слов. Обратите внимание, что места не могут быть использованы в заявлении DEFMAC.

Макросы с аргументами

Для того, что макросы могут изменить код они производят – мы должны иметь какой-то способ передачи информации на макросы, когда они вызываются. Мы делаем это путем встраивания аргументы в макрос, когда мы вызываем его. Есть два типа аргументов, которые мы должны различать.

1) Числа, в том числе выражения этикеток / переменных и числовых констант.

2) Константы, включая имена регистров и некоторых кодов операций мнемоники.

Большинство макросов, которые имеют регистрации имен в качестве аргументов обычно используют только часть общего числа доступных регистров и так же макросы, которые требуют числовые аргументы требуют только цифры в определенных пределах. Таким образом, чтобы удовлетворить это требование сборщик имеет возможность определять наборы регистров (Формально называемые константами) или поддиапазоны чисел.

Константы

Константы имена, которые могут принимать значения (немного как этикетки), но которые совершенно отличаются от меток и переменных в том, что они не могут быть использованы в выражениях. Значение постоянной занимает, зависит от его использование. Вот как мы определяем постоянные имена:

DEFCONST (BC, DE, HL, AF)

Это определение не генерирует никакого кода, конечно, и это цель, чтобы сообщить ассемблеру, имена которых постоянные имена, таким образом, предотвращая их использование случайно в качестве меток.

Наборы констант

Сейчас мы находимся в состоянии использовать константы, которые мы определили ранее. Для этого мы должны собрать их в наборы; мы делаем это следующим образом:

DEFSET REG16 = (BC, DE, HL).

Мы сейчас определили набор под названием REG16 содержащий константы BC, DE и HL. Эти константы теперь имеют значение при использовании в контексте REG16 – их значения присваиваются, начиная с нуля и приращения для каждого имени в наборе, так БК имеет значение 0, DE имеет значение 1 и HL имеет значение 2. Следует подчеркнуть, что константы не обрабатывали таким же образом, как и этикеток и не могут быть использованы в выражениях и еще более; они только имеют значение, когда они могут быть найдены в наборе и их значение зависит от того, установлено их используют с. Чтобы проиллюстрировать использование Наборы и показать, как аргументы используются сейчас мы рассмотрим, как мы бы определить макрос, который будет генерировать код для всех Z80 8 бит зарегистрируйтесь, чтобы зарегистрировать инструкции нагрузки, то есть: LD B, L и т.д.

Во-первых, мы должны определить набор констант, который содержит имена всех регистров Данное руководство действительно для:

DEFCONST (A, B, C, D, E, H, L, недействительным).

DEFSET R8 = (B, C, D, E, H, L, недействительным,).

Обратите внимание, что порядок, в котором константы вводятся в DEFCONST заявлении не важен, но порядок их помещают в DEFSET утверждения, а также, что “мусор” постоянная была необходима, чтобы дополнить из списка, то есть: мы должны L в имеют значение 5 и иметь значение 7, а не регистр не имеет значение, соответствующее 6 Так имя нежелательной используется.

Теперь давайте определим макрос:

DEFMAC (“LD *, *”, R8, R8)

DB 40H + # 0 * 8 + # 1 КОНЕЦ

Звездочки в имени макроса определить, где аргументы должны появиться и список setnames после имени макроса строки определяют, какой набор каждый аргумент принадлежит. Каждый SetName соответствует каждому звездочкой в ​​строке имени. Значения аргументов передаются в макрос в наборе локальных переменных, которые могут получить доступ только макро, у них есть имена: # n, где п имеет значение в диапазоне от 0 до 255.

Взгляд на код операции для обучения мы определяем показывает, что это значение является комбинацией некоторых предустановленных данных и число регистров это использовать инструкцию DB в макрос будет верой и правдой генерировать код операции для этой команды.

Теперь давайте использовать этот макрос:

0000 78 LD A, B

0001 5F LD E, 0002 5A LD E, D

Обратите внимание, как пробелы игнорируются при вызове макросов. Пробелы разрешены в любом месте, кроме как в середине имени (то есть: ПРИВЕТ одно имя и Его LLO два названия), так пространства могут быть использованы для разделения аргументов от мнемоники, например.

Количество поддиапазоны

Желательно также, чтобы определить диапазоны номеров и дать название для них, как мы сделали с постоянными наборами и так еще одна функция DEFSET заявления является сделать именно это:

DEFSET BYTE = 0 до 255

Это время определяется поддиапазон чисел называемых BYTE, содержащих все номера спереди от 0 до 255 включительно. Теперь мы можем использовать этот набор для определения другой Z80 макро -load немедленное 8 бит зарегистрируйтесь есть: LD C, 4

DEFMAC ( “LD *, * ‘, R8, BYTE)

DB 6 + # 0 * 8 DB # 1 END.

Обратите внимание, что единственная разница между этим макро и последний тип второго аргумента, и, таким образом, что assemb [л] э знает, что имя макроса строка “LD *, *” уже определено, “” вставляется перед ним в определении. Это должно быть сделано, когда имя макроса строка повторяется в противном случае сообщение об ошибке “Двухместный идентификатор” будет генерироваться.

Вот как мы можем использовать эту новую макрос:

0003 0620 LD 8,00100000B

0005 3EFA LD, 0FAH 0007 2645 LD H, “E”

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

Некоторые команды Z80 требуют аргумента, который имеет только одно значение, чтобы следовать им (Такие, как: EX DE, HL постоянны). Используя приведенные выше методы определения макросов мы должны были бы определить два набора:. Один с HL в [D] другой с OE, в котором не хочется. Так что для того, чтобы избежать необходимости делать это постоянные имена могут быть использованы в макроопределений и будет означать набор с одним элементом. Чтобы проиллюстрировать это определим макрос EX DE, HL:

; Если предположить, что KL и OE были определены как константы

DEFMAC (“EX *, *”, DE, HL)

DB 0EBH END.

0000 E8 EX DE, HL; Использование этого макроса

В настоящее время вы можете он интересно, почему мы не определим макрос, который не используется никаких аргументов в вышеупомянутом случае. 5uch как:

DEFMAC (“EX-DE, HL”); Это незаконно

DB 0EBH END.

Если имена DE и HL не были определены как константы этот макрос будет вполне приемлемо, но как они были определены как константы ассемблера будет искать макро маски, например так: “EX *, *” и, таким образом, “Неопределенная” об ошибке происходят.

С объекты до сих пор покрыты теперь оно должно быть возможным для пользователя, чтобы написать его / ее собственные макросы, которые могут имитировать любой мнемоники в наборе команд Z80 и многое другое.

Условная сборка

Основной оператор условного сборка поддерживается этим Асем [б] Лер является IF-END и комбинации заявление IF-ELSE-END. Они используются, чтобы приложить части кода сборки и включения / выключения ассемблера сборки его. Это в основном используется для предоставления сразу источника объявление производить ряд различных версий программы, в зависимости от набора ‘выключатели »в начале исходного кода. Вот краткий пример его использование:

Вот условная процедура хранения данных; для дисковых систем она должна содержать код, чтобы написать на диске и для ленточных систем она должна содержать код, чтобы написать на ленте:

ДИСК: EQU 0

ЛЕНТА: EQU 1

SWITCH: EQU ДИСК

… Много исходного кода …

ПИШИТЕ:

ЕСЛИ ВЫКЛЮЧАТЕЛЬ = ЛЕНТА

… Код интерфейс Лента …

КОНЕЦ

ЕСЛИ ВЫКЛЮЧАТЕЛЬ = ДИСК; *

… Код интерфейс Disk …

КОНЕЦ

… Отдых исходного файла …

* – Код так указано могут быть заменены одной ELSE заявление.

Один пункт Примечательно, что заявление ЕСЛИ работает вычисления выражения и, если он равен нулю, что берется в качестве «ложь», если он не равен нулю считается «истинно». Это означает, что первое утверждение IF можно было бы заменить на следующее:

ЕСЛИ ВЫКЛЮЧАТЕЛЬ

Но в этом примере это делает утверждение менее ясна.

В заявлении ЕСЛИ также может быть использован внутри макроопределений, позволяя макросы для изменения во время вызова, как они собираться.

Вот небольшой, но полезный пример для иллюстрации этого:

Предположим, мы хотим, чтобы определить макрос, который выполняет следующие операции: LD Р.Р., (HL), где р-р является еще 16 разрядный регистр из множества HL, DE, BC. так что если бы мы должны были вызвать LD BC, (HL), использовать бы следующие инструкции:

1) LD C, (HL); Получить младший байт

2) INC HL 3) LD B, (HL); Получить старший байт 4) декабря HL; восстановление HL

Подобная последовательность будет требоваться для регистра DE.

С другой стороны, мы, возможно, пожелает сделать это инструкция: LD HL, (HL). В этом случае было бы необходимо следующие инструкции:

  1) PUSH AF; Сохранить AF 2) LD A, (HL); Получить младший байт 3) INC HL 4) LD H, (HL); Получить старший байт 5) LD L, A; Загрузите младший байт 6) POP AF; восстановление AF    Так что мы должны три различных кодовых последовательностей для каждого типа обучения. Это может быть сделано с утверждением IF в определении макроса:

DEFCONST (HL, DE, BC).

DEFSET RR = (BC, DE, HL).

DEFMAC (“LD *, (*)”, RR, HL

ЕСЛИ # 0 = 0; чехол для LD BC, (HL)

LD C, (HL) INC HL LD B, (HL) Декабрь HL ELSE IF # 0 = 1; чехол для LD DE, (HL) LD E, (HL) INC HL LD D, (HL) Декабрь HL ELSE IF # 0 = 2; чехол для LD HL, (HL) PUSH AF LD, (HL) INC HL LD H, (HL) LD L, POP AF END END END; Один для каждого IF

0000 F57E23S6

0004 6FFI LD HL, (HL); Вызовы макрос 0006 4E23462B LD BC, (HL) 000A 5E23562B LD DE, (HL)

КОНЕЦ

Модификация Аргумент

Wtien помощью макросов внутри макросов можно изменить значение, что определение макроса видит постоянный аргумент как. Это делается путем сразу после аргумент в вызове макроса со значением, которые будут добавлены к констант значение (набор связанных) в квадратных скобках: то есть: LD C 1, если ссылаться внутри макроса будет генерировать код для LD D , (См библиотеку Z80 макро).

Это средство может быть использовано для упрощения вышеприведенный пример:

DEFMAC (“LD *, (*)”, RR, HL)

ЕСЛИ # 0<2; BC 4 OE дело

LD C # 0 * 2, (HL) INC HL LD B # 0 * 2, (HL) Декабрь HL ELSE PUSH AF LD, (HL) INC HL LD H, (HL) LD L, POP AF КОНЕЦ END.

Таким образом, хотя это сложный объект, чтобы использовать его вовсе упростить код в определенных обстоятельствах.

Итерация и переменная

Часто бывает полезно для макросов для создания таблиц и т.д., а для этого они должны быть в состоянии иметь условный оператор захвата петли – Это сборщик два: $ время – последовательность END и $ ПОВТОР – SUNTIL последовательность и есть $ ПЕРЕРЫВ Заявление для выхода из этих последовательностей. Их использование лучше проиллюстрировать примером, потому что они не очень сильно отличаются от подобных заявлений в языках высокого уровня.

Вот макрос, который будет заполнить ряд байтов с конкретной стоимости на время сборки:

DEFVAR (СЧЕТЧИК).

DEFSET Н.Н. = 0 до 256.

DEFMAC (“FILL * байт-С *”, Н. Н., Н. Н.)

СЧЕТЧИК: – # 0

$ ПОКА СЧЕТЧИК>0

DB # 1 СЧЕТЧИК: = СЧЕТЧИК-1 КОНЕЦ END.

0000 AAAAAAAA 0004 AAAAAAAA 0008 AA FILL 9 байтов с OAAH; Вот как мы ее используем.

Обратите внимание, что мы использовали то, что было похоже на этикетке как счетчик. Это было на самом деле переменная и был определен в качестве такового в DefVar заявлении, которое работает в основном так же, как DEFCONST. Переменные могут быть использованы в любом месте, что этикетки используются, но должны быть назначены с помощью “=”, а не на фас для нормальных меток. Преимущество переменных над этикеток является то, что переменные могут быть назначены на более чем один раз без ассемблера возражение. Они могут, конечно, быть использован в любом месте метки используются и могут иногда быть использованы с выгодой вместо этикетки, но лучше, чтобы ограничить их использование, в противном случае могут быть ошибки, которые не будут подобраны ассемблера.

$ REPEAT используется во многом таким же образом, как и $ While исключением того, что условие проверяется в конце цикла, а не в начале.

то есть: $ ПОВТОР

… Какой-то код …

$ ДО выражения

Когда $ ПЕРЕРЫВ заявление встречается в одном из вышеуказанных петель, монтажные разрывы с его текущего положения и продолжается после окончания цикла. Это также может быть использован, чтобы вырваться из макросов.

Монтажник прекращения информация

Когда сборщик завершает он печатает на экране несколько статистики о сборке: Окончательное значение псевдо счетчика команд ($), окончательное значение указателя загрузки, начальные и конечные адреса рабочей области используется и при любой errors- количество ошибок и пропусков ассемблера они произошли от.

Создание библиотеки

Как уже было сказано в начале этого ассемблера поставляется со встроенным в библиотеки макросов, содержащий всю систему команд Z80. Вполне возможно, для пользователя, чтобы изменить эту библиотеку и, таким образом, персонализировать сборщика, мало или столько, сколько хи любит! Можно было бы, например, чтобы избавиться от множества Z80 и поставить в макроопределений для набора 6502 команд. Не нужно даже поставить в микро наборов инструкций; пользователь может создать свой собственный язык, сделанный из макросов.

Чтобы добавить новую библиотеку пользователь должен сначала написать его, когда он будет любого у другой программы ассемблера (макро библиотека Z80 построен в ассемблере поставляется на ленте, предоставленной таким образом, что пользователь может изменять его содержимое). Затем файл собраны с помощью опции “K”. Полученные таким образом таблицы затем положить в конце ассемблере на 9175H перед исходного файла (изменить адрес на 6148H изменить файловую начальный адрес и перезагрузите файл). Поставляемая версия имеет исходный файл, начиная с 9FFDH и библиотека Z80 макро приходит на о 9FC6H так мало места осталось. Стоит оставив столько же места, сколько возможно для новой библиотеки, перемещая начало файла, а затем движется файл запуска до просто мимо конце библиотеке, когда закончите. Конец новой библиотеки обозначается второй области секции рабочего пространства в информации о прекращении ассемблера. (При использовании опции “K” первое поле будет указывать на конец файла, как обычно). Этот “новый” сборщик может быть сохранен на ленте (6000h до конца + 1 рабочее пространство).

ОБЩИЕ Руководство пользователя

Если предположить, что файл был создан, содержащий исходный код сборки в правильном формате, он собран следующим образом:

1) Введите ‘Z’ в то время как в редакторе.

2) Введите вариант письма, необходимые.

3) Нажмите кнопку ENTER и подождите.

   

   

КОНЕЦ

КОНЕЦ

Ошибки

ЗАГРУЗКА

LOAD “”

Тип:

ВВЕДЕНИЕ

             

   

   

   

^

      

Пример:

      

Пример:

      

      

Пример:

      

      

      

Пример:

      

      

      

,

Пример:

      

Пример:

)

      

      

Пример:

      

Пример:

      

      

      

Пример:

      

Пример:

     0. >

     , Т

      

      

      

      

Обзор команд

   

   

   

       

   

Краткая информация о Spectre-Mac-Mon

Игра Spectre-Mac-Mon запускается прямо на сайте. Эта утилита для программинга на ASM, опубликованная в Великобритании в 1983 году компанией Oasis Software, которую написал Philip Harvey.

Не запускается или глючит игра, или не можете пройти? Спросите в комментариях.

Subscribe
Уведомлять об
guest
0 комментариев
Inline Feedbacks
View all comments

Сохранённые игры[X]

  

Справка[X]

Помощь уже в пути!

  • x1
  • x2
  • x3

Кликни в окно эмулятора, чтобы управлять!
<<<<

Не забывайте периодически сохранять игровой прогресс на сервере (клавишей F8), чтобы уверенно продвигаться вперёд!

Если вы гость на сайте, то прогресс будет сохранён только в памяти браузера и потеряется при закрытии. Чтобы этого не произошло - просто войдите в свой профиль.

Для загрузки сохранённой игры жмите F3 или откройте меню "Диск" кнопкой на правой панели.

Если игра не запускается, или у вас есть вопросы по игре - задайте их ниже.

Поделиться
Close
0
Would love your thoughts, please comment.x