Язык программирования Форт



         

Глава 16. Программирование на форт-ассемблере - часть 5


Вы можете видеть, что так же, как в версии MMSFORTH на Z-80, оба эти описания SWAP извлекают и укладывают коды из стека и в стек с использованием регистров. MMSFORTH применяет AX- и DX-регистры, a MVPFORTH - AX и BX. Следующие три байта в MMSFORTH и следующие четыре в MVPFORTH являются двумя версиями NEXT. Обе загружают содержимое регистра SI в ВХ-регистр и затем для продолжения работы осуществляют передачу управления по адресу, хранящемуся в ВХ., В обеих версиях Форта SI-регистр используется для хранения указателя инструкций. который мы в гл. 15 назвали IP. Существуют ли какие-то причины для различий между MMSFORTH и MVPFORTH? Версия MVPFORTH немного быстрее, в то время как NEXT MMSFORTH требует на один байт меньше памяти; различие тривиально. (Но быстродействие очень важно в определении слова NEXT, поскольку оно завершает все примитивы.) Версия SWAP MVPFORTH может точно так же использоваться в MMSFORTH, и наоборот, с точно таким же результатом. Существует обычно несколько различных путей реализации одной и той же функции в машинных кодах. Прежде чем создавать слово, которое выполняет машинную программу, давайте рассмотрим откомпилированную форму программы-примитива. Поле программы слова-примитива указывает на его поле параметров. Как мы видели в гл. 15, это придает примитиву следующую форму: Поле Имени Связи Программы Параметров Адрес NFA LFA CFA PFA Содержимое Имя Адрес PFA (Машинная программа NEXT) , +

Для того чтобы вы могли написать собственный примитив, вы должны найти машинную программу NEXT или ее эквивалент в вашей системе. Это можно сделать с помощью пропечатки некоторых примитивов, чтобы узнать, как они завершаются. Если вы располагаете Форт-ассемблером, то он, вероятно, снабжен словом, подобным NEXT, которое выполняет эту функцию. Теперь давайте опишем новую версию SWAP с именем MYSWAP. Начнем с формирования заголовка MYSWAP, а затем заменим содержимое CFA так, чтобы там лежал адрес поля параметров MYSWAP. Чтобы сформировать заголовок MYSWAP напишем CREATE MYSWAP HERE DUP 2- ! Его PFA определяется с помощью слова HERE и затем эта величина записывается в поле программы MYSWAP, которое занимает два байта перед PFA. (Эта методика может не работать для Форта, который записывает слова нетрадиционным способом.) Раз вы поместили адрес поля параметров MYSWAP в его CFA, компилируйте далее машинную программу просто байт за байтом (убедитесь, что вы работаете с шестнадцатеричной системой): D1 С, Е1 С, 05 С, Е5 С, F0 С, Е9 С, для MMSFORTH на Z-80 (или другие байты, используемые в описании SWAP в вашей системе).


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