Язык Форт и его реализации

         

Реализация встроенного ассемблера - часть 6


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

CODE >< ( N1 ---> N2) H POP A L MOV L H MOV H A MOV H PUSH NEXT;

Приведенная реализация встроенного ассемблера может быть усовершенствована по нескольким направлениям. Прежде всего, увеличив константы LBLMAX и FRMAX и добавив новые определения для слов, обозначающих метки, можно увеличить количество разных меток и ссылок вперед, которые разрешается использовать в ассемблерном определении. Далее можно ввести контроль правильности операндов, включив соответствующие проверки в исполняющую часть определяющих слов для мнемоник команд. Для проверки числа элементов на стеке обычно используется глобальная ячейка CSP и слово !CSP, которое засылает в нее текущий адрес вершины стека. Интересным расширением является возможность введения макрокоманд. Макрокоманды без локальных меток можно определять обычным образом через двоеточие:

INRN ( R:РЕГИСТР,N:ЧИСЛО РАЗ ---> ) [ ABSEMBLER ] 0 DO DUP INR LOOP DROP ;

При исполнении текста А 3 INRN будут скомпилированы три команды А INR.

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




Содержание  Назад