ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ
Как вы видели, в Форте аргументы передаются через стек, и
и "." выполняют действия над элементами стека. 16-
битовое представление целого числа является стандартным для
Уровень приложений языка
Скомпилированные слова Форта,
хранящиеся в словаре системы.
Предназначены для программиро-
вания прикладных задач пользователя
Слова, предназначенные для создания
новых слов (определяющие слова), их
компиляции и записи в словарь
Слова, поддерживающие процесс
интерпретации программ, введенных
с клавиатуры или считанных с диска
Слова, реализующие доступ к
устройствам ввода-вывода:
клавиатуре и дисплею
* дисководам
Слова, написанные в машинном коде,
которые управляют выполнением
основных операций виртуальной
Форт-машины. Сюда входят:
* слова периода выполнения (т.е.
реализующие процедуры) для опреде-
ляющих и компилирующих слов
* внутренний (адресный) интер-
претатор
Рис. 6.1. Уровни слов Форта
реализаций Форта, ориентированных на 8-разрядный компьютер;
однако в компьютере с 32-разрядным процессором область памяти
для хранения числа (так называемая ячейка) занимает 32 бита.
Несмотря на то что при реализации Форта всегда ориентируются
на некоторый постоянный размер ячейки, сама по себе ее величина
не влияет на определения базовых функций языка. Какой бы ни
была величина ячейки памяти, именно она определяет количество
118
разрядов, отводимых для хранения чисел одинарной точности, и
машинных адресов.
Уровень машинной реализации
! 2+ CMOVE> MOD
2- COUNT NEGATE
*/ 2/ D+ NOT
*/MOD < D< OR
+ = DEPTH OVER
+! > DNEGATE PICK
> R DROP R>,
/ ? DUP DEXECUTE R@
/MOD @ EXIT ROLL
0< ABS FILL ROT
0= AND I SWAP
0> C! J U<
1+ C@ MAX UM*
1- CMOVE MIN UM/MOD
XOR
Уровень управления периферийными устройствами
BLOCK KEY BUFFER SAVE-BUFFER
CR SPACE EMIT SPACES
EXPECT TYPE FLUSH UPDATE
Уровень интерпретатора
# < # FIND PAD
#> > BODY FORGET QUIT
#S > IN FORTH SIGN
#TIB ABORT FORTH-83 SPAN
BASE HERE TIB
( BLK HOLD U.
-TRAILING CONVERT LOAD WORD
DECIMAL .( DEFINITION
Уровень компилятора
+LOOP , ." :
; DO LOOP VOCABULARY
ABORT" DOES> REPEAT WHILE
ALLOT ELSE STATE [
BEGIN IF THEN [ ' ]
COMPILE IMMEDIATE UNTIL [ COMPILE ]
CONSTANT LEAVE VARIABLE ]
CREATE LITERAL
|
В Форте допустимы числа не только одинарной, но и двойной
точности. Арифметические операции над числами с двойной точ-
ностью не применяются при обработке символьной информации и
поэтому здесь не рассматриваются; их подробное описание можно
найти в литературе, ссылки на которую имеются в библиографии.
Форт включает в себя четыре основных арифметических опе-
рации и несколько их вариаций. Операция вычитания имеет вид:
Вычитание n2 из nl и занесение
результата nЗ на стек.
Умножение и деление представляются так:
Умножение nl на n2 и занесение
результата nЗ в стек.
Деление nl на п2 и занесение
результата пЗ в стек.
Если нужно получить остаток от деления, то выполняется следую-
щая операция:
/ MO D ( n 1 n 2 ==> r q ) Деление nl на n2 с получением
остатка г и частного q.
Быстрое умножение или деление на 2 позволяют осуществить
такие команды:
Значением n2 является nl, умноженное на 2.
2/ ( n 1 ==> n 2) Значением п2 является nl, деленное на 2.
Результат не округляется - последние цифры просто отбрасы-
ваются.
Часто также применяются слова, которые увеличивают или
уменьшают число на единицу или на два:
Увеличение nl на единицу.
Увеличение nl на два.
Уменьшение nl на единицу.
Рис. 6.2. Слова, предусмотренные стандартом Форт-83
120
121
2- (n1 ==> n2) Уменьшение n1 на два.
Например, в результате деления 60 на 10 и уменьшения частного
на единицу, т.е. выполнения слов
60 10 / 1 -
получим число 5. Поскольку в качестве чисел в Форте ис-
пользуются целые со знаком, имеется слово для получения
значения с противоположным знаком:
NEGATE ( n 1 ==> n 2) Результатом является n2 = -nl.
Кроме приведенных выше основных арифметических опера-
ций, в Форте предусмотрены слова для нахождения наибольшего и
наименьшего из двух чисел:
где 14 - шестнадцатиричное представление десятичного числа 20.
Число, записанное в шестнадцатиричной системе счисления, поме-
чается предшествующим знаком доллара ($). Например, число 20 в
шестнадцатиричной системе счисления будет выглядеть как $14.