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



             

Стек данных и вычисления - часть 5


Такое расположение делает простым переход от двойной точности к обычной через слово DROP. Расширение двойных чисел включает следующие слова:

2DROP AA ---> 2DUP AA ---> AA,AA 2OVER AA,BB ---> AA,BB,AA 2ROT AA,BB,CC ---> BB,CC,AA 2SWAP AA,BB ---> BB,AA D. AA ---> D+ AA,BB ---> сумма AA+BB D- AA,BB ---> разность AA-BB DABS AA ---> абсолютная величина AA DNEGATE AA ---> число с обратный знаком -AA

Здесь обозначение типа AA подчеркивает, что значение занимает два элемента стека. Хотя стандартное расширение этого не предусматривает, во многих реализациях языка Форт этот ряд продолжают операции умножения и деления:

D* AA,BB ---> произведенме AA*BB D/ AA,BB ---> частное от AA/BB DMOD AA,BB ---> остаток от AA/BB

Операндами и результатами перечисленных слов являются значения двойной длины, занимающие по два элемента стека каждый; это обстоятельство отражено в мнемонике, начинающейся с цифры 2, когда два элемента стека выступают как одно целое, или с буквы D (от слова DOUBLE — двойной), когда речь идет арифметическом значении двойной длины.

Следующие два слова являются переходными между арифметическими операциями одинарной и двойной точности; их мнемоника включает букву M (от слова MIX — смесь) и U (от слова UNSIGNED — беззнаковый):

UM* A,B ---> CC UM/MOD AA,B ---> C,D

Слово UM* перемножает операнды A и B как 16-разрядные числа без знака, возвращая все 32 разряда получившегося произведения. Слово UM/MOD рассматривает 32-разрядное делимое AA и 16-разрядный делитель B как числа без знака и возвращает получающиеся 16-разрядные остаток C и частное D. Если делитель нуль или частное превышает 65535, то это рассматривается как ошибка. Для перехода к двойной точности с учетом знака многие реализации имеют слово S>D  A --> AA, которое расширяет исходное число A до числа двойной точности распространением знакового разряда.

Чтобы при вводе различать числа двойной и одинарной точности, в сформулированное выше правило умолчания внесена оговорка: если не найденное в словаре слово состоит только из цифр с возможным начальным знаком минус, то это число одинарной точности, а если в слово входят точки (в любом месте), то это число двойной длины.Пример использования форт-системы как калькулятора для работы с числами двойной длины представляет следующий протокол работы:

> 1234567. 7654321. D+ D. 8888888 ОК

В ответ на приглашение (знак > ) программист вводит два числа двойной длины, операцию сложения этих чисел и операцию печати результата. Выполняя указанные действия, форт-система печатает ответ (заметьте, что он уже не содержит точки) и подтверждающее сообщение ОК.




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