Начальный курс программирования на языке Форт


ФОРТ-АССЕМБЛЕР - часть 6


Заметьте, что, появившись внутри ассемблерного определения, слово SHIFT+ помещает в словарь две команды, составляющие определение этого слова так, как если бы вместо него были введены сами команды: RLC В ADD

Адрес слова SHIFT+ не компилируется, а само оно при выполнении его кода не вызывается в качестве подпрограммы. Использование макросредств во время выполнения не приводит к каким-либо накладным расходам, поскольку машинные команды после макроподстановки в точности такие же, как и без нее.

Слово NEXT представляет собой одну из макрокоманд, написанных на языке Ассемблера. В нашей системе она определена так: : NEXT (NEXT) JMP ;

Иными словами, NEXT - это машинная команда, передающая управление по адресу, который оставляет в вершине стека слово (NEXT). По данному адресу расположен код адресного интерпретатора (о котором речь шла в гл. 9). Адресный интерпретатор является ядром Форта и выполняет поочередно все адреса в скомпилированном Форт-определении. Каждое определение через CODE должно заканчиваться инициированием адресного интерпретатора. Следовательно, любое ассемблерное определение должно завершаться словом NEXT. В нашем ассемблере определения также должны иметь в конце слово END-CODE, которое дополнительно восстанавливает контекст.

Ниже приводятся два примера, где используются команды описанного здесь ассемблера: HEX CODE X ( n -- n') \ Меняются местами старший и младший байты n Н POP L A MOV H L MOV A H MOV H PUSH NEXT END-CODE

(Мы пересылаем п из стека в пару регистров HL, регистр L (младшие байты) в регистр А, регистр Н (старшие байты) в L, а А в Н, помешаем содержимое пары регистров HL в стек, передаем управление NEXT).CODE BP ( a # -- ) \ Перевод из нижнего регистра в верхний D POP H POP BEGIN D A MOV Е ORA 0= NOT WHILE M A MOV 60 CPI CS NOT IF 20 SUI A M MOV THEN D DCX H INX REPEAT NEXT END-CODE

(Пересылаем счетчик в пару регистров DE, а адрес - в пару регистров HL, начинаем цикл, проверяем, выполняя команду OR над содержимым регистров D и Е, не равно ли значение счетчика нулю.


Начало  Назад  Вперед



Книжный магазин