в предыдущем случае, введем определяющее
Как и в предыдущем случае, введем определяющее слово:: 3MI CREATE С, DOES> ( регистр# -- ) С@ SWAP 8 * OR С, ;
04 3МI INR
Теперь выражение "С INR" занесет в словарь код операции: 00001100.
С помощью слова 3MI можно специфицировать еще один класс команд, в чем вы убедитесь, посмотрев листинг, приведенный в конце раздела.
Для создания команд остальных типов нам достаточно ввести всего два определяющих слова - 4MI и 5М1. Первое применяется для образования кодов тех операций, которые требуют дополнительно восьмиразрядного литерала, например ADI (непосредственное сложение с А). Второе слово определяет коды операций, требующих дополнительно 16-разрядного литерала. В качестве примера можно привести команды CALL, JMP и подобные им. Команды MOV, MVI и LX1 уникальны и поэтому специфицируются индивидуально посредством двоеточия без использования определяющего слова.
Изучая листинг, обратите внимание на то, что в него включены операторы управления, такие, как
IF,
ELSE,
THEN,
BEGIN,
UNTIL,
WHILE и
REPEATE. Это не совсем те слова, с определениями которых вы уже познакомились ранее (где передача управления компилируется посредством высокоуровневых слов Форта), а их версии, созданные только для ассемблера, где передача управления и разрешение адресов, как и в традиционном ассемблере, осуществляются на уровне машинных команд. Однако они обеспечивают вам возможность программирования с использованием формата структур высокого уровня.
Но можно ли компилировать в словарь различные варианты слов
IF,
THEN и т. д., они ведь в нем смешаются? Конечно, так как команды ассемблера хранятся в контекстном словаре
ASSEMBLER, а не в словаре
FORTH. Определение
CODE в нашем листинге инициирует слово
ASSEMBLER, что делает этот контекстный словарь текущим всякий раз, когда мы начинаем CODE-определение.
Интересной особенностью Форт-ассемблера является и его расширяемость. Если в вашей программе имеются повторяющиеся фрагменты, то вы можете вместо них использовать макрокоманды. Ниже приводится пример макрокоманды, которая осуществляет «циклический сдвиг содержимого регистра А влево» и затем «добавляет содержимое регистра В»: : SHIFT+ RLC В ADD ;
Содержание Назад Вперед