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



         

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


Если у вас нет PSH2, которое является удобным словом, так как часто нужно засылать содержимое этих двух регистров в стек, вы можете описать его: ASSEMBLER DEFINITIONS : PSH2 DX PUSH AX PUSH NEXT ; FORTH Это должно подсказать вам мысль, как можно добавлять к ассемблеру новую мнемонику и новые слова.

Давайте рассмотрим еще одно описание, которое представляет собой еще один пример и послужит расширению вашего опыта в этой области: CODE + AX POP DX POP DX AX ADD AX PUSH NEXT END-CODE

При операции + два числа извлекаются из стека и засылаются в АХ- и DX-регистры. Слово ADD складывает содержимое АХ- и DX-регистров (результат заносится в АХ). Наконец сумма из АХ засылается в стек. Имеется, конечно, еще много мнемонических кодов, которые мы здесь используем. Как мы сказали раньше, вам следует изучить книгу по программированию на ассемблере, чтобы вполне освоить Форт-ассемблер.

Действие слова ;CODE сопоставимо с DOES>. Подобно DOES>, ;CODE отмечает начало исполняемой части программы слова-описателя, но рабочая программа производного слова в этом случае будет написана в машинных кодах с использованием мнемоники ассемблера или С,. Таким образом, описания : FORTH-CARRAY CREATE 1+ ALLOT DOES> + ; и : CODE-CARRAY-CREATE 1+ ALLOT ;CODE HL POP DE HL ADD HL PUSH NEXT END-CODE эквивалентны в ассемблере для Z-80, но слова, сформированные CODE-CARRAY, будут исполняться намного быстрее. На IBM PC в MMSFORTH 100.000 итераций описания DOES> требуют 7,2 с, в то время как эквивалентные им описания ;CODE выполнят эту работы за 2,3 с.

В отличие от слова DOES>, которое засылает в стек PFA производного слова (и используется производными словами FORTH-CARRAY для вычисления адреса элемента массива), ;CODE требует, чтобы адрес лежал в ячейке, следующей за ним. Адрес PFA или жестко связанного с ним адреса содержится в регистре, который используется в качестве указателя слов (WP). Предшествующее описание CODE-CARRAY предполагает, что WP хранится в регистре DE, как это и есть в MMSFORTH для TRS-80.


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