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

       

А. Глоссарий (список слов Форта)


Этот глоссарий включает слова Форт-79 и Форт-83, некоторые нестандартные слова из MMSFORTH и прочих версий и другие полезные слова, которые определены в тексте и упражнениях. При описании слов используются следующие сокращения:

I слова немедленного исполнения С может использоваться только в режиме компиляции Е может использоваться только в режиме исполнения 83REQ слова Форт-83 из обязательного списка 83ASM ассемблер Форт-83 83DBL слова Форт-83 для работы с числами двойной длины 83SYS системные слова Форт-83 83CNT слова Форт-83 из контролируемого списка 83UNC слова Форт-83 из неконтролируемого списка 83FLD экспериментальные слова Форт-83 для преобразования адресов полей 83SRC экспериментальные слова Форт-83 для спецификации порядка поиска и управления 79REQ слова Форт-79 из обязательного списка 79ASM слова ассемблера Форт-79 79DBL слова Форт-79 для работы с числами двойной длины 79RSV слова Форт-79 из резервного списка MMS слова MMSFORTH FIG слова FIGFORTH MVP слова MVPFORTH F83 слова версии Форта Лаксена и Перри VAR слова, встречающиеся в некоторых версиях ТХТ слова, описанные в тексте книги

Определения в этом глоссарии взяты из стандартов Форт-83 и Форт-79, но большинство из них переписаны для того, чтобы сделать их более понятными и подчеркнуть отличия стандартов. Этот глоссарий не заменяет описаний стандартов и не является исчерпывающим руководством, включающим в себя описания всех нестандартных слов (из контролируемого и неконтролируемого списков, а также резервных слов), которые встречаются в стандартах. Из MMSFORTH включены только те слова, которые встречаются в тексте. MMSFORTH содержит в себе все слова Форт-79 и многие слова помимо этого. Аналогично включены только те слова из других версий, которые встречаются в книге. Форт-описания, которые приведены для слов, имеющихся в MMSFORTH, не являются собственно MMSFORTH-описаниями. В некоторых случаях даются ссылки на более полные описания в тексте. Конечно, в тех случаях, где нет ссылок, следует воспользоваться предметным указателем.
Элементы глоссария упорядочены в соответствии с ASCII- кодами.

! "store" ("присвоить") 83REQ 79REQ (n адр --)

Записывает n по адресу "адр". # "sharp" 83REQ 79REQ (d1-- d2)

Самая правая цифра d1 преобразуется в ASCII-символ в соответствии со значением BASE и заносится в форматированную выходную строку (для последующего вывода с помощью TYPE). d2-число, содержащее оставшиеся цифры, используемые для последующей переработки. Используется между . Слово для отображения числа центов, представленного числом двойной длины со знаком, в виде числа долларов и центов может быть описано как : .DOLLARS ( d -- ) SWAP OVER DABS TYPE ; Например: 5236.DOLLARS отобразит $52.36. См. также .

#> "sharp-greater" 83REQ 79REQ ( d - адр n) Завершает преобразование числа в форматированную выходную строку, "адр" - адрес выходной строки-результата, a n - число символов в ней, "адр n" удобно использовать совместно с TYPE. Для примера смотри #. См. также #, . #TIB "number-t-i-b" "число t-i-Ь" 83REQ VAR ( -- адр) Переменная, где хранится число байтов, лежащих в данный момент во входном текстовом буфере. Значение, которое заносится в #Т1В, может лежать в диапазоне от 0 до максимального числа символов, помещающихся во входном текстовом буфере (стандарты требуют минимум 80 символов). $! "string-store" "записать строку" MMS ( адр1 адр2 --) Переносит содержимое счетной строки (включая байт-счетчик) из адреса "адр1" в "адр2". $" "string-quote" "ввести строку" MMS ( -- адр) Запоминает строку, ограниченную " (двойной кавычкой) в PAD, адрес которого заносится в стек к качестве "адр". Строка записывается в счетном формате. Таким образом; $" Foxy" COUNT TYPE отобразит на экране "Foxy". $+ "string-concatenate" "соединить строки" MMS ( адр1 адр2 -- адр3) Добавляет счетную строку, лежащую по адресу "адр2" (без байта-счетчика), к правому концу счетной строки по адресу "адр1" и помещает счетную строку-результат в буфер PAD, адрес которой в виде "адр3" заносится в стек. $-ТВ "string-minus-t-b" "строка-минус-tb" MMS ( $адр -- $адр) Удаляет пробелы (ASCII 32) в конце счетной строки путем уменьшения байта-счетчика на их число.


Сравните с -TRAILING. $. "string-dot" "строка-точка" MMS ( адр --) Отображает счетную строку, лежащую по адресу "адр". Эквивалентно COUNT TYPE. $ARRAY "string-array" "массив строк" MMS ( n2 --) Слово-описатель, которое создает массив строк. При использовании в форме n1 n2 $ARRAY

создает статью в словаре с именем и резервирует место для n2+1 счетных строк с максимальной длиной n1+1 байтов каждая. Когда к



производится обращение: n

в стек заносится адрес строки-элемента с номером n+1. $CHAR "string-char" "строка-символ" ТХТ (n -- адр) Создает счетную строку из одного символа, соответствующего ASCII коду (n), который лежит в стеке и записывает ее в PAD, адрес которого заносится в стек в виде "адр". См. также CHR$. : $CHAR I PAD С! PAD 1+ С! PAD ; $COMPARE "string-соmраrе" "сравнение строк" MMS ( адр1 адр2 -- флаг) Сравнивает две счетные строки, занося в стек -1, 0 или 1, в зависимости от того, является ли строка с адресом "адр1" меньше чем, равна или больше чем строка с адресом, "адр2". Сравнение производится по схеме символ-за-символом. Слово полезно в программах сортировки строк. $CONSTANT "string-constant" "строка-константа" MMS ТХТ ( --) Слово-описатель, которое создает строку-константу. При использовании в форме $CONSTANT string" формирует статью словаря с именем и компилирует последующую строку (вплоть до разделителя ") в счетном формате. При исполнении в стек заносится адрес счетной строки. $GET "string-get" "принять строку" ТХТ ( адр --) Записывает строку по адресу "адр". При использовании в форме: $GET " строка (вплоть до разграничителя ") записывается в счетном формате по адресу "адр". : $GET 34 WORD DUP C@ 1+ ROT SWAP CMOVE ; $IN "string-in" "ввести строку" ТХТ (-- адр) Выдает на экран запрос "?" и ждет ввода с клавиатуры до 255 символов.


Когда будет введено 255 символов или поступит код "возврата каретки", введенная последовательность будет записана в виде счетной строки в PAD, адрес которого будет занесен в стек как "адр". : $IN PAD 1+ 255 2DUP BLANK ." ? " 2DUP EXPECT -TRAILING PAD C! 1- ; См. также IN$, $SWAP "string-swap" "поменять строки местами" ТХТ (адр1 адр2 --) Меняет местами счетные строки с адресами "адр1" и "адр2". Строки должны иметь равную максимальную зарезервированную длину. : $SWAP DUP DUP С@ 1+ >R PAD SWAP R@ CMOVE SWAP DUP ROT R@ CMOVE PAD SWAP R> CMOVE ; См. также $XCHG. $VARIABLE "string-variable" "строка-переменная" MMS Слово-описатель, которое создает строки-переменные. При использовании в форме n VARIABLE

формирует статью в словаре с именем и резервирует n+1 байтов для запоминания счетной строки (в исходный момент байт-счетчик равен 0). При исполнении в стек заносится адрес, где лежит эта строка. $XCHG "string-exchange" "обмен строками" MMS ( адр1 адр2 --) Меняет местами счетные строки по адресам "адр1" и "адр2". Строки должны иметь идентичные максимальные длины. См. также $SWAP. ' "tick" "апостроф" I (79) 83REQ 79REQ Определения ' (апостроф) в Форт-79 и Форт-83 отличаются существенно. В Форт83 при использовании '

в стек заносится адрес поля программы слова . В Форт-83 ' не является словом немедленного действия и обычно используется в режиме исполнения. Противостоит [']. В Форт-79 ' выполняет одну из двух операций в зависимости от того, в режиме компиляции или исполнения находится система. В режиме исполнения '

засылает в стек адрес поля параметров слова , в то время как в режиме компиляции адрес поля параметров компилируется в качестве литерала, который при последующем исполнении скомпилированного слова помещается в стек. В Форт-79 ' является словом немедленного исполнения. В обоих стандартах при отсутствии в словаре дается сообщение об ошибке.


В Форт-83 команда ' > BODY засылает тот же адрес поля параметров, что и '

в Форт-79. ( "paren" "скобка" I 83REQ 79REQ Выделяет комментарии, которые должны быть проигнорированы в исходном тексте программы. Форма использования ( ккк) Символы "ккк", выделенные справа ) (закрывающая скобка), считаются комментарием и не обрабатываются. Пробел необходим за (, но не должен предшествовать символу ), который рассматривается в качестве разделителя, а не слова Форта. ( можно использовать как в режиме исполнения, так и компиляции. Число символов в "ккк" может лежать в диапазоне от 0 до числа символов, оставшихся во входном потоке вплоть до закрывающей скобки. В Форт-79, если входной поток иссякнет до закрывающей скобки, будет дано сообщение об ошибке. См. также \. * "times" "умножить" 83REQ 79REQ (n1 n2 -- n3) Умножает n1 на n2, выдавая произведение n3. n3 будет содержать младшие 16 битов произведения, даже если происходит арифметическое переполнение. ** "power" "возвести в степень" 83UNC 79RES ТХТ ( n1 n2 -- n3) Возводит n1 в степень n2, результат n3 кладет в стек. : ** ?dup 0= IF DROP 1 ELSE DUP I = IF DROP ELSE OVER SWAP 1- 0 DO OVER * LOOP SWAP DROP THEN THEN ; */ "times-divide" "умножить-разделить" 83REQ 79REQ */ ( n1 n2 n3 -- n4) Умножает n1 на n2, результат делит на n3, засылает в стек частное n4. Произведение n1 на n2 представляется в виде промежуточного результата двойной длины, обеспечивая большую точность, чем при традиционной последовательности n1 n2 * n3 / В Форт-83 используется деление с нижней границей(1), в то время как в Форт-79 частное округляется в направлении нуля. */MOD "times-divide-mod" "умножить-разделить с остатком" 83REQ 79REQ ( n1 n2 n3 -- n4 n5) Умножает n1 на n2, результат делит на n3, остаток n4 и частное n5 засылаются в стек. Как и в случае */, промежуточное произведение имеет двойную длину. В Форт-83 применено деление,с, нижней границей. + "plus" "плюс" 83REQ 79REQ (n1 n2 -- n3) ======================== 1 Частное округляется в сторону нижней границы (floored), а остаток имеет знак делителя.


Деление -8/5 дает частное -2 в Форт- 83 и -1 в Форт-79.- Прим. перев. ======================== Добавляет n1 к n2 и выдает сумму n3. n3 содержит младшие 16 битов суммы даже в случае арифметического переполнения. +! "plus-store" "плюс-присвоить" 83REQ 79REQ ( n1 адр --) Добавляет n1 к числу одинарной длины, хранящемуся по адресу "адр", замещая старое значение полученным результатом. +LOOP "plus-loop" "плюс-цикл'' I C 83REQ 79REQ ( n --) Завершает do-loop, позволяя увеличивать (или уменьшать) индекс цикла на величину, большую чем 1. При использовании в форме : ... DO ... +LOOP ; компилирует структуру do-loop. Когда исполняется, +LOOP предполагает наличие числа (n) в стеке, которое определяет величину приращения индекса в цикле. В Форт-83 "n" добавляется к индексу цикла, и если сумма "пересечет" границу между значением предела цикла минус единица и самим пределом, то цикл завершается. В Форт-79 цикл завершается, когда индекс становится больше или равен пределу (с учетом знака). В обоих стандартах управление передается слову, следующему за соответствующим DO, если цикл не завершился, д слову после +LOOP, - если завершился. Противостоит LOOP. См. обсуждение завершения цикла в гл. 8. См. также DO. , "comma" "запятая" 83REQ 79REQ ( n--) Записывает "n" в очередную свободную ячейку словаря (адрес которой определяется словом HERE) и увеличивает указатель словаря на 2, чтобы зарезервировать место для "n". При этом говорится, что "п" скомпилировано по адресу HERE. Например, если XYZ было определено как CREATE XYZ 153 , то команда XYZ @ . отобразит скомпилированное число 153. См. также С,. - "minus" "минус" 83REQ 79REQ ( n1 n2 -- n3) Вычитает n2 из n1, остаток n3 кладет в стек. --> "next-block" "следующий блок" I 83CNT 79REQ ТХТ MMS ( --) Немедленно переключают интерпретацию на начало следующего по порядку блока. : --> 1 BLK+! ; IMMEDIATE -ROT "minus-rote" "минус-РОТ" ТХТ МVP VAR (n1 n2 n3 - n3 n1 n2) Засылает верхний код стека в третью его позицию.


Эквивалентно ROT ROT. -TRAILING "minus-trailing" 83REQ 79REQ (адр n1 -- адр n2) Корректирует число символов n1 текстовой строки, начинающейся по адресу "адр", чтобы вычислить число n2, которое не включает пробелы, завершающие строку, "адр" не изменяется. Если n1 равно 0, n2 также будет равно 0, если в строке содержатся только пробелы, то и n2 будет равно 0. (Часто используется для определения числа введенных символов при работе с EXPECT. Более детальная информация содержится - глава 15, секция Исполнение. . "точка" 83REQ 79REQ ( n--) Отображает в текущей позиции дисплея величину "n" (включая знак минус, если "n" отрицательно) в соответствии со значением BASE. После числа вводится пробел. ." "dot-quote" I C 83REQ 79REQ ( --) Компилирует и (или) отображает текст. При использовании в форме : ... ." ссс" ... ; компилирует текст "ссс". следующий после." вплоть до разграничителя w (двойная кавычка) в описании слова .За ." должен следовать пробел (и он не включается в последовательность "ссс"), а перед " (двойная кавычка), которая является разграничителем, а не словом Форта, пробел не требуется. Откомпилированный текст будет отображен при исполнении . В Форт-83 слово." может использоваться только в режиме компиляции. (В противоположность .(.) В Форт-79." может использоваться в режиме исполнения; в этом случае текст немедленно отображается. Форт-79 предполагает также, что текст может содержать до 127 символов или даже более, и, если входной поток иссякнет до завершающей ", будет дано сообщение об ошибке. .( "dot-paren" "точка-скобка" 83REQ ( --) При использовании в форме .( ссс) немедленно отображает текст, следующий за.( вплоть до разграничителя ) (закрывающая скобка), как в режиме компиляции, так и исполнения. Пробел необходим после.( (и он не включается в последовательность "ссс"), но пробел не должен предшествовать закрывающей скобке, которая является разграничителем, а не словом Форта.


Полезно для комментариев, которые отображаются при интерпретации блоков. Противостоит.". .BIN "dot-binary" "точка двоичная" ТХТ ( n -- n) Отображает n в двоичном представлении без изменения состояний стека или BASE. : .BIN DUP BASE @ 2 BASE ! SWAP . BASE ! ; .BLK -dot-b-l-k" "точка-b-l-k" ТХТ ( --) Отображает номер интерпретируемого в данный момент блока или 0 при режиме исполнения). : .BLK BLK @ U. ; IMMEDIATE .DEC "dot-decimal" "точка десятичная" ТХТ ' / ( n - n) Отображает п в десятичном представлении без изменения указателя стека или BASE. : .DEC DUP BASE @ DECIMAL SWAP . BASE ! ; .HEX "dot-hex" "точка-HEX" ТХТ ( n --n) Отображает n в шестнадцатеричном представлении без изменения указателя стека или BASE. : .HEX DUP BASE @ 16 BASE ! SWAP . BASE ! ; .L "dot-l" "точка-l" ТХТ ( n1 n2 -) Отображает n1 в соответствии с величиной BASE в поле шириной n2 позиций так, что старшая цифра занимает самую левую позицию. См. также.R. ; .L SWAP 0 ROT OVER - ROT ROT TYPE SPACES ; .LINE "dot-line" "точка-строка" ТХТ ( n1 n2 -->) Отображает строку n2 в блоке n1. n2 может принимать значения от 0 до 15. : .LINE SWAP BLOCK SWAP 64 * + 64 TYPE ; .LSB "dot-l-s-b" "точка-l-s-b" ТХТ ( n-- ) Отображает младший байт числа n. : .LSB 255 AND . ; .MEM "dot-mem" "точка-mem" ТХТ MMS ( --) Отображает число байтов между PAD и верхом стека. В большинстве версий - это объем свободной памяти. : .MEM SP@ PAD - U. ; .MSB "dot-m-s-b" "точка-m-s-b" ТХТ ( n --) Отображает старший байт числа n. : .MSB 256 / . ; .NUMS "dot-numbers" "точка-числа" ТХТ Отображает число n в двоичном, восьмеричном, десятеричном, и шестнадцатеричном представлениях, не изменяя BASE. : .NUMS .BIN .ОСТ .DEC .HEX DROP ; .OCT "dot-octal" "точка восьмеричная" ТХТ ( n -- n0) Отображает число n в восьмеричном представлении* не изменяя указатель стека или величину BASE. : .OCT DUP BASE @ 8 BASE ! SWAP .


BASE ! ; .R "dot-r" "точка-r" 83CNT 79RES MMS ( n1 n2 --) С учетом значения BASE отображает число n1 в поле длиной n2 так, что младшая цифра занимает самую правую позицию поля. Если n1 отрицательно, перед ним печатается знак минус. В Форт-83, если необходимое число символов для отображения n1 больше n2, дается сообщение об ошибке. Размер поля менее 1 в Форт-83 также запрещен. В Форт-79 при требуемом числе символов для отображения n1 больше n2 ошибка не фиксируется. (В большинстве версий Форт-79 печатает в таком случае результат без предшествующего пробела). Если в Форт79 n2 меньше 1, предшествующий пробел также не вводится. .S "dot-s" "точка-s" ТХТ MMS ( --) Отображает все числа в стеке без изменения его указателя. В Форт-83 описание имеет вид : .S DEPTH ?DUP 0= IF ." STACK EMPTY" ELSE 0 DO DEPTH 1- ROLL DUP . LOOP THEN ; а в Форт-79 : .S DEPTH ?DUP 0= IF." Stack empty" ELSE 0 DO DEPTH ROLL DUP . LOOP THEN ; / "divide" "разделить" 83REQ 79REQ ( n1 n2 -- n3) Делит n1 на n2, частное n3 засылает в стек. В Форт-79 n3 округляется в направлении нуля, в то время как в Форт-83 используется деление с нижней границей. В форт-83 при делителе, равном 0, или если частное оказывается вне пределов -32.768 - 32.767, дается сообщение об ошибке. /MOD "divide-mod" "деление с остатком" 83REQ 79REQ (n1 n2 - n3 n4) Делит n1 на n2, остаток n3 и частное n4 засылаются в стек. В Форт-83 применено деление с нижней границей, в Форт-79 частное округляется в направлении 0. В Форт-83 при делителе, равном 0, или если частное оказывается вне пределов -32.768 - 32.767, дается сообщение об ошибке. 0< "zero-less" "меньше нуля" 83REQ 79REQ ( n -- флаг) Сравнивает n с 0 и засылает в стек флаг истинно, если n меньше 0. О= "zero-equals" "равно нулю" 83REQ 79REQ ( n -- флаг) Сравнивает n с 0 и засылает в стек флаг истинно, если n равно 0. См. также NOT. которое является синонимом 0= в форт-79, но имеет совсем иной смысл в Форт-83. 0> "zero-greater" "больше нуля" 83REQ 79REQ ( n -- флаг) Сравнивает n с 0 и засылает в стек флаг истинно, если n больше 0. 0ARGMAKE "0-arg-make" ТХТ ( n--) Слово-описатель, которое формирует мнемонику ассемблера, чтобы скомпилировать байт, который при описании является аргументом.


При использовании в форме n 0ARGMAKE

формирует статью словаря с именем и компилирует младшие 8 битов числа n в поле параметров . При исполнении байт в его поле параметров будет скомпилирован в словарь. (Подробно рассмотрено главе 16, Как работает ассемблер). 1+ "one-plus" "прибавить единицу" 83REQ 79REQ (n1 -- n2) Добавляет 1 к n1 и кладет результат в стек n2. 1- "one-minus" "вычесть единицу" 83REQ 79REQ (n1 --n2) Вычитает 1 из n 1 и результат n2 кладет в стек. 16* "sixteen-times" "умножить на 16" MMS (n1 -- n2) Умножает n1 на 16 и результат п2 кладет в стек. 2! "two-store" "два-присвоить" 83DBL 79DBL ( d адр --) Записывает число двойной длины по адресу "адр". 2$ARRAY "two-string-array" "двумерный массив строк" MMS ( n1 n2 n3 --) Слово-описатель, которое создает двумерный массив строк (матрицу). При использовании в форме n1 n2 n3 2$ARRAY

формирует статью в словаре с именем и резервирует место для счетных строк с максимальной длиной n1+1 при числе рядов n2+1 и числе столбцов n3+1. Когда массив используется как n1 n2

в стек заносится адрес начала строки, лежащей в ряду n1+1 и столбце n2+1. 2* "two-times" "умножить на 2" 83CNT 79RES MMS ( n1 -- n2) Умножает n1 на 2, результат n2 заносит в стек. 2+ "two-plus" "прибавить 2" 83REQ 79REQ ( n1 -- n2) Прибавляет 2 к n1, а результат n2 заносит в стек. 2- "two-minus" "вычесть 2" 83REQ 79REQ ( n1 -- n2) Вычитает 2 из n1, результат n2 заносит в стек. 2/ "two-divide" "разделить на 2" 83REQ 79REQ ( n1 -- n2) Делит n1 на 2, результат n2 заносит в стек. 2@ "two-tetch" "извлечь двойное число" 83REQ 79REQ (адр - d) Кладет в стек число двойной длины, лежащее по адресу "адр". 2ARRAY "two-array" "двумерный массив" MMS ( n1 n2 --) Слово-описатель, которое создает двумерный массив (матрицу) чисел одинарной длины.


При использовании в форме n1 n2 2ARRAY

формирует статью в словаре с именем и резервирует место для n1+1 рядов и n2+ 1 столбцов чисел одинарной длины. При обращении n1 n2

в стек заносится адрес элемента, лежащего в ряду n1+1 и столбце n2+1. См. также 2CARRAY; ARRAY. 2CARRAY "two-c-array" "2-с-массив" MMS ( n1 n2 --) Слово-описатель, которое создает двумерный массив (матрицу) байтов. При использовании в форме n1 n2 2CARRAY

формирует статью в словаре с именем и резервирует место для n1+1 рядов и n2+1 столбцов байтов. При обращении к

n1 n2

в стек заносится адрес элемента, лежащего в ряду n1+1 и колонке n2+1. См. также 2ARRAY; ARRAY. 2CONSTANT "two-constant" "константа двойной длины." 83DBL 79DBL ( d --) или (n1 n2 --) Слово-описатель, которое создает константу двойной длины (она может использоваться также для записи двух чисел одинарной длины). При использовании в форме d 2CONSTANT или n1 n2 2CONSTANT

формирует статью в словаре с именем и компилирует число двойной длины (или два числа одинарной длины) из стека. Когда исполняется, d (или n1 и n2) засылаются в стек. См. также CONSTANT; CCONSTANT; 4CONSTANT. Противостоит 2VARIABLE. 2DROP "two-drop" "2-DROP" 83DBL 79DBL ( d --) Удаляет из стека число двойной длины (или два числа одинарной длины). 2DUP "two-dupe" "2-DUP" 83DBL 79DBL ( d - d d) или (n1 n2 - n1 n2 n1 n2) Дублирует в стеке число двойной длины (или пару чисел одинарной длины), 2OVER "two-over" "2-OVER" 83DBL 79DBL ( d1 d2 - d1 d2 d1) или (n1 n2 n3 n4 -- n1 n2 n3 n4 n1 n2) Копирует второе сверху число двойной длины и кладет его на верх стека или копирует третье и четвертое сверху числа одинарной длины и кладет их на верх стека. 2QUAN "two-quan" "2-QUAN" MMS ( --)

Слово-описатель, которое создает слова типа QUAN для чисел двойной длины. При использовании в форме 2QUAN

формирует в словаре статью с именем и резервирует место для числа двойной длины.


Когда слово используется само, код, который оно содержит, заносится в стек. Если перед ним стоит IS, число из стека заносится в поле параметров . Если же перед ним стоит AT, в стек заносится адрес поля параметров слова . (Более подробно о QUAN написано в главе 6 - Переменная, константа и связанные с ней слова) См.-также QUAN; CQUAN; 4QUAN. 2RОТ "two-rote" "2-ROT" 83DBL 79DBL ( d1 d2 d3 - d2 d3 d1) или ( n1 n2 n3 n4 n5 n6 - n3 n4 n5 n6 n1 n2) Засылает третье сверху число двойной длины в стеке на его верх (или засылает третью сверху пару чисел на верх стека). 2SWAP "two-swap" "2-SWAP" 83DBL 79DBL ( d1 d2 - d2 d1) или ( n1 n2 n3 n4 -- n3 n4 n1 n2) Меняет местами в стеке два верхних числа двойной длины (или две верхние пары чисел одинарной длины). 2VARIABLE "two-variable" "переменная двойной длины" 83DBL 79DBL ( --) Слово-описатель, которое создает переменную двойной длины. При использовании в форме 2VARIABLE

формирует статью в словаре с именем и резервирует 32 бита в поле параметров для хранения числа двойной длины. Когда исполняется, адрес поля параметров , где хранится число двойной длины, засылается в стек. 2VARIABLE не обязательно инициализирует значение переменной. См. также VARIABLE; CVARIABLE; 4VARIABLE. Противостоит 2CONSTANT. 4! "two-store" "4-присвоить" MMS ( f1 адр--) Записывает 64-разрядное число из стека в память по адресу "адр". Обычно используется для чисел с плавающей запятой, 4@ "four-fetch" "4 извлечь" MMS ( адр--f1) Засылает в стек 64-разрядное число, лежащее по адресу "адр". Обычно используется для чисел с плавающей запятой. 4ARRAY "four-array" "массив чисел учетверенной длины" MMS ( f1 --) Слово-описатель, которое создает линейный массив (вектор) с 64- битовыми элементами (обычно используемыми для чисел с плавающей запятой). При использовании в форме n 4ARRAY

формирует статью в словаре с именем и резервирует место для n+1 числа с плавающей запятой.


Когда используется в форме n

в стек заносится адрес (n+1)- го элемента массива. См. также ARRAY; CARRAY. Противоположно 2ARRAY. 4CONSTANT "four-constant" MMS ( f1 -) Слово-описатель, которое создает 64-битовую константу (обычно для чисел с плавающей запятой). При использовании в форме f1 4CONSTANT

формирует в словаре статью с именем и компилирует число с плавающей запятой f1 из стека в поле параметров . Когда исполняется, число с плавающей запятой засылается в стек. 4QUAN "four-quan" "4-QVAN" MMS ( --) Слово-описатель, которое создает слова типа QUAN для 64-битовых чисел. При использовании в форме: 4QUAN

формирует в словаре статью с именем и резервирует 64 бита для числа с плавающей запятой. Когда слово используется само, код, который оно содержит, заносится в стек. Если перед ним стоит IS, значение, хранящееся в стеке, заносится в поле параметров . Если же перед ним стоит AT, в стек заносится адрес поля параметров слова . (Подробнее QUAN обсуждается в гл. 6). См. также CQUAN; QUAN; 2QUAN. 4VARIABLE "four-variable" * MMS ( --) Слово-описатель, которое создает 64-битовую переменную обычно для чисел с плавающей запятой. При использовании в форме 4VARIABLE

формирует статью в словаре с именем и резервирует 64 бита в поле параметров для хранения числа с плавающей запятой. Когда

исполняется, адрес поля параметров , где хранится число с плавающей запятой, засылается в стек. 4VARIABLE не обязательно инициализирует значение переменной. См. также VARIABLE; CVARIABLE; 2VARIABLE. Противостоит 4CONSTANT. 64* "sixly-four-times" "умножить на 64" MMS ( n1 - n2) Умножает n1 на 64, результат n2 кладет в стек. 79-STANDARD "79-standard" "стандарт-79" 79REQ ( --) Используется для проверки того, отвечает ли используемая версия стандарту Форт79. Если версия нестандартная, слово либо не будет узнано, либо будет дано сообщение об ошибке. См. также Форт-83. 8* "eight-times" "умножить на 8" MMS (n1 - n2) Умножает число n1 на 8, результат n2 заносит в стек. ; "colon" "двоеточие" 83REQ 79REQ ( -- ) Слово-описатель, которое формирует слово-двоеточие.


При исполнении в форме.. : ... ; формирует статью словаря с именем в текущем контекстном словаре и переключает STATE в режим компиляции, вызывая компиляцию последующих слов и чисел из входного потока. не может быть найдено в словаре до тех пор, пока не будет успешно обработан соответствующий оператор ; или ;CODE. Оператор : устанавливает такой порядок поиска, при котором первым просматривается контекстный словарь, который заменен словарем компиляции. Словарь компиляции не изменяется. Слово-двоеточие - главное средство программирования на Форте. См. также ;, ;CODE. ; "semi-colon" "точка с запятой" 83REQ 79REQ ( --) Прекращает компиляцию описания-двоеточие. При исполнении в форме : ... ; разрешает нахождение имени в словаре, компилирует EXIT (или зависящее от системы слово, которое выполняет аналогичное действие), устанавливает STATE в режим исполнения. При использовании его исполнение завершается словом EXIT и управление передается слову, которое обратилось к . См. также :,;CODE. ;CODE "semi-colon-code" 83ASM 79ASM ( --) Слово-описатель-терминатор, которое может использоваться только в режиме компиляции. При исполнении в форме : ... CREATE ... ;CODE ... END-CODE прерывает компиляцию, завершает работу слова-описателя и исполняет слово ASSEMBLER. Это разрешает использование мнемоники ассемблера для компиляции программы между ;CODE и END-CODE. При исполнении для формирования

поле программы будет содержать адрес машинной программы, которая размещена сразу после ;CODE в . Таким образом, ;CODE позволяет создавать слова-описатели, которые формируют производные слова, функция которых определена последовательностью мнемокодов ассемблера, размещенных между ;CODE и END-CODE в описании . По своему действию подобно DOES>. См. также CODE; END-CODE; CREATE; DOES>; и обсуждение в гл. 15. < "less-lhan" "меньше чем" 83REQ 79REQ (n1 n2 - флаг) Сравнивает числа n1 и n2 и засылает в стек флаг истинно ( так в тексте) ; #S; HOLD; SIGN. "not-equal" "неравно" 83UNC 79RES MMS (n1 n2 - флаг) Сравнивает числа nl и n2 и засылает в стек флаг истинно, если nl не равно n2. , а число переносимых байтов задается числом без знака.


См. также CMOVE; MOVE. "greater-than" "больше" 83REQ 79REQ ( n1 n2 - флаг) Сравнивает числа n1 и n2 и засылает флаг истинно, если n1 больше n2. >= "greater-than-or-equal" "больше или равно" MMS ( n1 n2 - флаг) Сравнивает числа n1 и n2 и засылает флаг истинно, если n1 больше или равно n2. >BODY "to-body" 83REQ (адр1 -- адр2) Исходный адрес "адр1" - адрес поля программы слова. В стек засылается "адр2" -"адрес поля параметров этого слова. В Форт-83 ' >BODY выдает тот же адрес, что и '

в Форт-79. >IN "to-IN" 83REQ 79REQ (-- адр) Переменная, которая содержит номер текущего байта во входном потоке, где происходит сейчас интерпретация. Если источником входного потока является массовая память, команда BLK @ BLOCK >IN @ + засылает в стек текущий адрес интерпретации; в Форт-83 при вводе с клавиатуры эквивалентный адрес вычисляется по команде: >IN @ TIB + >LINLK "to-link" 83FLD ( адр1 - адр2) Исходное число "адр1" - адрес поля программы слова, результат "адр2" - адрес поля связи этого слова. >NAME "to-name" 83FLD (адр1 -- адр2) Исходное число "адр1" - адрес поля программы слова, результат "адр2" - адрес поля имени этого слова. >R "to-r" 83REQ 79REQ ( n --) Передает n из стека параметров в стек возвратов. Поскольку слово Ж изменяет стек возвратов, оно в норме должно использоваться в паре с R> до завершения описания-двоеточие. Противостоит R@. ? " question-mart" "знак вопроса" 79REQ ( адр--) Отображает число, лежащее по адресу "адр". Использует формат оператора.. Эквивалентно @ . . ?BRANCH "question-branch" "условное ветвление" 83SYS VAR (флаг --) При исполнении в форме : ... COMPILE ?BRANCH ... ; в текст описания-двоеточие компилируется операция условного перехода. При исполнении, если флаг в стеке имеет значение ложно, передача управления производится так же, как при BRANCH.


Если же флаг имеет значение истинно, исполнение производится, начиная со слова, скомпилированного сразу после адреса ветвления, который следует за ?BRANCH. См. стр.211, где имеются более подробное описание и примеры. Обычно в программировании ?BRANCH не используется, в некоторых версиях применение ограничено описаниями IF, WHILE и UNTIL. ?DUP "question-dupe" 83REQ 79REQ ( n - n n) или ( 0 - 0) Дублирует в стеке число n, если оно не равно 0. ?KEY "question-key" MMS ( - с) Проверяет, была ли нажата какая-либо клавиша, и засылает в стек ASCII-код клавиши или 0, если ни одна клавиша не нажата. ?KEY не ожидает нажатия клавиши. @ "fetch" "извлечь" 83REQ 79REQ ( адр - nb) Заносит в стек число одинарной длины, хранящейся по адресу "адр". См. С@; 2@; 4@. ABORT "abort" 83REQ 79REQ ( -->) Очищает стек параметров и выполняет функцию QUIT, возвращая управление клавиатуре терминала. Не выдается никаких сообщений, даже "ok". Для обсуждения роли ABORT в качестве центрального слова внешнего интерпретатора Форт см. также описание QUIT в гл. 7. ABORT" "abort-quote" 83REQ VAR (флаг --) Отображает сообщение в зависимости от флага в стеке и прерывает исполнение программы. При использовании в форме : ... ABORT" ссс" ... ; компилирует текст "ссс" вплоть до разграничителя " (двойная кавычка) в описании . После ABORT" необходим пробел, который не включается в "ссс"; перед разграничителем " пробела не требуется. При исполнении

ABORT" предполагает наличие флага в стеке. Если флаг не равен 0, скомпилированный текст будет отображен, а затем исполнится последовательность команд, включающая ABORT. Если флаг будет иметь значение ложно, вышеуказанные процедуры будут опущены и исполнение будет продолжено. Точная форма отображения может зависеть от версии - может отображаться имя слова, в котором использовано , или только текст сообщения. ABS "absolute" "абсолютная величина" 83REQ 79REQ ( n1 -- n2) Засылает в стек значение абсолютной величины числа n1, т.


е. то же значение числа, но непременно положительное. Исключение составляет Форт-83, где для числа -32.768 знак не меняется (оно в норме не меняется и в Форт-79). ACASE "a-case" MMS ( симв -) Начинает алфавитно-цифровую CASE-структуру ACASE А В" OTHERWISE ...CASEND Список символов (здесь А, пробел и В), завершаемый двойной кавычкой, используется для выбора того, какое из списка Форт-слов, следующих за ", будет исполнено. Таким образом, если в стеке символ "A" (ASCII 65), управление будет передано слову ; аналогично, если в стеке код пробела (ASCII 32), управление передается . Если выбранное слово исполнено, управление передается слову, следующему за CASEND, Если код символа в стеке не содержится в списке символов, управление передается слову, следующему за OTHERWISE (если оно используется) или за CASEND. См. также NCASE. Обсуждение CASE-структур смотри в гл. 7. ALLOT "allot" "зарезервировать" 83REQ 79REQ ( n--) Резервирует место в словаре для п байтов, т.е. адрес первой свободной позиции в словаре, который засылается в стек оператором HERE, увеличивается на n. AND "and" "и" 83REQ 79REQ ( n1 n2 -- n3) Выполняет логическую операцию побитного "И" для чисел n1 и n2. т.е. каждый бит числа n1 сравнивается с эквивалентным битом числа n2 и, если любой из битов равен 0, в соответствующий бит числа n3 заносится 0. Итак (в двоичном представлении), 110 100 AND зашлет в стек двоичный код 100. См. также OR; XOR. ARRAY "array" "массив" MMS ( n -) Слово-описатель для создания линейных массивов (векторов) чисел одинарной длины. При использовании в форме n ARRAY

формирует статью в словаре с именем и резервирует место для n+1 числа одинарной длины. Когда используется в форме: n

В стек засылается адрес (п+О-го элемента массива См. также CARRAY; 2ARRAY; 4ARRAY. ASC "ack-e" MMS ( адр - n) Засылает в стек ASCII-код первого символа счетной строки, хранящейся по адресу "адр".


ASSEMBLER "assembler" "ассемблер" 83ASM 79ASM ( --) Заменяет первый контекстный словарь, где производится поиск, на словарь ASSEMBLER. В Форт-79 ассемблер выбирается как CONTEXT-словарь. AT "at" MMS ( --) При использовании в форме AT

засылает в стек содержимое слова QUAN-типа с именем . См. также QUAN; 2QUAN; 4QUAN. Противостоит IS. См. обсуждение QUAN в гл. 6. BASE "base" "основание" 83REQ 79REQ ( адр -) Переменная, содержащая основание системы счисления, которое используется при вводе и выводе. чисел. Так 2 base ! выберет двоичную систему счисления для ввода-вывода. В Форт-83 основание системы счисления должно лежать в пределах 2 - 72. а в Форт-79 это диапазон 2 - 70. См. также DECIMAL; OCTAL; HEX; BINARY. BASE? "base-question" TXT ( --) Отображает текущее значение BASE в десятичном представлении без изменения BASE. : BASE? BASE @ DUP DECIMAL . BASE ! ; BEGIN "begin" I C 83REQ 79REQ ( --) Отмечает начало структуры бесконечного цикла. При использовании в форме : ... BEGIN ... флаг UNTIL ... ; или : ... BEGIN ... флаг WHILE ... REPEAT ... ; компилирует структуру бесконечного цикла. Когда исполняется, слова между BEGIN и UNTIL будут выполняться повторно, пока флаг в стеке соответствует состоянию истинно. Исполнение слов между BEGIN и REPEAT будет повторяться до тех пор, пока флаг в стеке перед исполнением WHILE равен истинно. Слова после UNTIL или REPEAT будут исполняться по завершении цикла. BINARY "binary" TXT ( --) Выбирает двоичное представление чисел при вводе-выводе. : BINARY 2 BASE ! ; См. также DECIMAL; HEX; OCTAL. BL "b-l" 83CNT 79RES MMS ( -- 32) Заносит в стек ASCII-код пробела (десятичное число 32). BLANK "blank" 83CNT 79RES MMS ( адр n --) Записывает в n байтов памяти, начиная с адреса "адр", ASCII-код пробела (десятичное 32). При n, равном 0, ничего не делается. (В стандарте Форт-79 этот оператор имеет имя BLANKS, но так как для этого нет никакой исторической причины и поскольку несколько версий используют BLANKS, мы предполагаем, что это имя является типографской ошибкой в тексте стандарта.) BLK "b-l-k" 83REQ 79REQ ( - адр) Переменная, содержащая номер блока в массовой памяти, который в данный момент интерпретируется.


Если величина BLK равна 0, источником входного потока является клавиатура. BLOCK "block" "блок" 83REQ 79REQ ( n -- адр) Засылает в стек адрес первого байта буфера, содержащего блок n. Если блок еще не в памяти, то он будет передаваться из массовой памяти в блочный буфер, обращение к которому произошло раньше других. (В Форт-83 используется не обязательно буфер, к которому дольше всего не обращались, как в случае Форт-79, но большинство реализации следует версии Форт-79.) Если блок, занимающий этот буфер, не является блоком n и он был подвергнут операции UPDATE (т.е. модифицирован), его содержимое будет перенесено в массовую память, прежде чем блок n будет считан в буфер. Если правильное чтение или запись в массовую память не возможны, будет дано сообщение об ошибке. Дальнейшее обсуждение слова BLOCK см. в гл. 10. BODY> "from-body" 83FLD ( адр1 -- адр2) Исходный код "адр1" - адрес поля параметров слова, результат, "адр2",-- адрес поля программы. BRANCH "branch" С 83SYS ( --) При использовании в форме : ... COMPILE BRANCH ... ; компилируется оператор безусловного перехода. Адрес ветвления должен быть скомпилирован сразу после оператора безусловного перехода. Обычно не используется при составлении программ, а только в словах ELSE и REPEAT. См. также ?BRANCH. BUFFER "buffer" "буфер" 83REQ 79REQ ( n - адр) Присваивает номер блока т блочному буферу, обращение к которому произошло раньше других. В стек при этом засылается адрес первого байта этого буфера. В Форт-79 блок не читается из массовой памяти, он может читаться или нет в Форт-83. Если буфер был помечен для записи на диск (UPDATE), его содержимое будет перенесено в массовую память. Если правильная передача в массовую память невозможна, будет дано сообщение об ошибке. Слово BUFFER подобно BLOCK, за исключением того, что не обязательно производится обмен с массовой памятью. См. также BLOCK. С! "c-store" "С-присвоить" 83REQ 79REQ ( адр --) Записывает младший байт числа n в байт с адресом "адр".


См. также ! С, "С-comma" "С-запятая" 83REQ 79REQ ( n--) Записывает младший байт числа п (который в норме меньше 256) в байт первой свободной позиции словаря (адрес, засылаемый в стек оператором HERE) и добавляет к указателю словаря 1, чтобы зарезервировать место для скомпилированного байта. См. также ,. С@ "C-fetch" "извлечь байт" 83REQ 79REQ (адр - n) Заносит в стек байт, лежащий по адресу "адр". Результатом является число, старший байт которого равен 0, а младший - извлеченному байту. См. также @. CARRAY "с-аrray" "массив байтов" ТХТ MMS ( n --) Слово-описатель, которое создает линейный массив (вектор) с однобайтовыми элементами. При использовании в форме n CARRAY

создается статья словаря с именем и резервируется место для n+1 байта. Когда используется в форме n в стек заносится адрес (n+1)-го элемента. : CARRAY CREATE ALLOT DOES> + ; См. также 2CARRAY; ARRAY; ECARRAY. CASEND "case-end" MMS ( --) Отмечает конец ACASE- или NCASE-структуры в MMS.FORTH. См. также ACASE; NCASE. CCONSTANT "c-constant" ТХТ MMS ( b --) Слово-описатель, которое создает байтовые константы. При использовании в форме n CCONSTANT

формирует в словаре статью с именем и записывает байт из стека в поле параметров . При исполнении байт из поля параметров заносится в стек. : CCONSTANT CREATE С, DOES> С@ ; CFA "с-f-а" FIG VAR ( адр1 -- адр2) Исходный код "адр1" является адресом поля параметров, результирующий "адр2" - адресом поля программы. CHR$ "c-h-r-string" MMS ( n -- адр) Создает однобайтовую счетную строку, которая содержит символ, ASCII-код которого лежит в стеке. Строка записывается в PAD, адрес которого "адр" заносится в стек. CMOVE "c-move" 83REQ 79REQ ( адр1 адр2 n --) Копирует, n байтов, начиная с адреса "адр1", и укладывает их, начиная с адреса "адр2". Перенос осуществляется, начиная с младших адресов, и продолжается в сторону старших.


В Форт-79, если n равно 0 или отрицательно, ничего не переносится. См. также ; MOVE. CMOVE> "c-move-up" 83REQ ( адр1 адр2 u --) Копирует и байтов, начиная с адреса "адр1", в область памяти, начинающуюся с адреса "адр2". Перенос происходит, начиная с больших адресов в направлении малых. Если u равно 0, ничего не переносится. CMOVE>

полезно для перемещения байтов в направлении "вверх", когда области обмена перекрываются. (В Форт-79 имеется имя ... END-CODE формирует статью словаря с именем и делает ASSEMBLER контекстным словарем, чтобы разрешить применение мнемоники ассемблера. При исполнении выполняется машинная программа. Слова, описанные таким образом называются CODE- описаниями или CODE-словами. COMPILE "compile" "скомпилировать" 83REQ 79REQ ( --) Обычный формат использования: : .,. COMPILE ... ; Когда компилируется , в словарь вслед за адресом программы COMPILE компилируется адрес поля программы . является обычно словом немедленного исполнения, а , как правило, не является таковым. Когда исполняется (обычно в описании типа двоеточие), адрес поля программы компилируется в верхнюю ячейку словаря. Во многих версиях Форта LITERAL может скомпилировать слово LIT в другие слова, так как команда COMPILE LIT используется в описании LITERAL. CONSTANT "constant" "константа" 83REQ 79REQ ( n --) Слово-описатель, которое создает константы одинарной длины; При использовании в форме n CONSTANT

формирует в словаре статью с именем и компилирует n в поле параметров . Когда исполняется, в стек заносится число одинарной длины n. См, также 2CONSTANT; 4 CONSTANT; CCONSTANT. Противоположно VARIABLE. CONTEXT "context" "контекст" 83SRC 79REQ ( -- адр) Заносит в стек адрес переменной, которая определяет контекстный словарь, подлежащий просмотру первым. Форт-83 содержит предварительное предложение, в котором не использовано слово CONTEXT (или CURRENT), но предусматривается альтернативный способ задания порядка просмотра словаря.


См. также CURRENT; DEFINITIONS; VOCABULARY. CONTROL "control" "управление" ТХТ ( n ... -) Слово-описатель, которое создает слово, предназначенное для посылки одного или более управляющих кодов на активное выходное устройство. При использовании в форме n... CONTROL (1) формирует статью в словаре с именем и компилирует один или более управляющих кодов ASCII из стека. Когда исполняется, управляющие коды, скомпилированные в его поле параметров, посылаются на активное в данный момент выходное устройство. : CONTROL CREATE DEPTH DUP С, 0 DO DEPTH ROLL С, LOOP (1) DOES> DUP DUP C@ + SWAP DO I 1 + C@ EMIT LOOP ; Дальнейшие пояснения можно найти в соотв. главе. CONVERT "convert" "преобразовать" 83REQ 79REQ ( d1 адр1 -- d2 адр2) Преобразует в соответствии с величиной BASE несчетную ASCII-строку цифр в число, d2 является результатом преобразования каждого из символов (цифр) в строке, начиная с адреса "адр+1", в число и аккумуляции каждого числа, умноженного на величину BASE, в d1 (d1 в норме равно 0). Преобразование продолжается до тех пор, пока не встретится не преобразуемы и символ. Адрес этого символа засылается в качестве "адр2". Таким образом, если стек содержит число двойной длины 55, а строка имеет вид "11х", тогда CONVERT занесет в стек число двойной длины 5511; а адрес "х" будет занесен в качестве "адр2". COPIES "copies" "скопировать" ТХТ ( n1 n2 n3 --) ================================== 1 Описание предполагает, что перед обращением (1) стек пуст,- Прим. перев. ============================== Копирует серию из "n3" смежных блоков, начиная с блока "n1", и укладывает их, начиная с блока "n2". Копирование начинается с блока с наименьшим номером и продолжается в направлении последнего блока. Смотри описание. COPIES> "copies-up" TXT ( n1 n2 n3 --) Копирует серию из n3 смежных блоков, начиная с n1, и записывает их, начиная с n2.


Перенос начинается с блока, имеющего наибольший номер, и продолжается в направлении первого блока. Описание смотри. COPY "copy" TXT ( n1 n2 --) Копирует блок "n1" в буфер для блока "n2" и производит операцию UPDATE для этого буфера. Когда выполняется слово FLUSH или когда буфер "n2" используется повторно, вышеописанная операция имеет эффект копирования блоков "n1" в "n2". (Чтобы предотвратить непредсказуемые результаты, до COPY следует применить операторы FLUSH или EMPTY-BUFFERS.) COUNT "count" "подсчет" 83REQ 79REQ (адр1 - адр2 n) Засылает в стек число символов в счетной строке, лежащей по адресу "адр1". "адр2" равен "адр1+1" и указывает на начало текста, а "n"- длина этого текста. COUNT засылает в стек адрес и число-счетчик, необходимые для работы слова TYPE. Таким образом COUNT TYPE отобразит счетную строку, лежащую по адресу "адр". : COUNT DUP C@ SWAP 1+ ; CQUAN "C-quan" MMS ( --) Слово-описатель, которое создает слова QUAN-типа с байтовым содержимым. При использовании в Форме CQUAN

формирует в словаре статью с именем и резервирует место в поле параметров для записи байта. Когда исполняется само , код, который в нем содержится, заносится в стек. Если перед ним стоит IS, число из стека записывается в поле параметров . Если перед ним стоит AT, в стек заносится адрес поля параметров . См. также QUAN; 2QUAN; 4QUAN. См. гл. 6, где дано описание слова типа QUAN. CR "с-r" "возврат каретки" 83REQ 79REQ ( --) Посылает на активное в данный момент внешнее устройство коды "возврат каретки" и "перевод строки". На дисплее CR-помещает обычно курсор в начало следующей строки. CREATE "create" "создать" 83REQ 79REQ (--) Слово-описатель, создающее статью в словаре. При использовании в форме CREATE

формирует статью с именем без резервирования места в поле параметров . При исполнении адрес первого байта поля параметров заносится в стек.


Поле параметров не защищено, если не использованы слова ALLOT, С, или ,. CREATE может также использоваться в описаниях типа двоеточие в форме : ... CREATE ... ; или : ... CREATE ... DOES> ... ; или : ... CREATE ... ;CODE ... END-CODE чтобы сформировать новое слово-описатель . Например, VARIABLE можно описать как: : VARIABLE CREATE 2 ALLOT ; или : VARIABLE CREATE 0 , ; чтобы присвоить переменной нулевое начальное значение. CRS "c-rs" ТХТ ( n --) Посылает n пар кодов "возврат каретки" и "перевод строки" на активное внешнее устройство. Это перемещает текст на дисплее на n строк вверх. : CRS 0 DO CR LOOP ; CRT "с-r-t" MMS ( --) Переключает вывод только на экран. См. также PCRT; PRINT. CURRENT "current" "текущий" 83SRC 79REQ ( -- адр) В Форт-79 это переменная, определяющая контекстный словарь, в котором будут описываться новые слова. В Форт-83 CURRENT является словом "системного расширения" и не входит в обязательный список. Порядок поиска слова здесь не задан, за исключением слов, входящих в экспериментальный список. См. также CONTEXT; DEFINITIONS; VOCABULARY. Подробнее разъяснение см гл. 14, Контекстные словари. CVARIABLE "c-variable" "С-переменная" MMS ( --) Слово-описатель, которое создает байтовые переменные. При использовании в форме CVARIABLE

формирует в словаре статью с именем и резервирует байт в его поле параметров. В качестве начального значения засылается нуль. При исполнении в стек засылается адрес его поля параметров. : CVARIABLE CREATE 0 С, ; D#IN "d-number-in" MMS ( -- d) Отображает запрос "?" и ожидает ввода числа. Число заносится в стек в виде кода двойной длины. При ошибке ввода последует запрос "?Redo" и вы сможете сделать еще одну попытку. В HI# и #РТ заносятся соответствующие коды. См. #IN. D* "d-times" "D-умножить" MMS VAR ( d1 d2 -- d3) Умножает d1 на d2 и заносит в стек произведение двойной длины d3. D*/ "d-times-divide" "D-умножить-разделить" MMS ( d1 d2 d3 -- d4) Умножает d1 на d2 (произведение имеет 64 бита) и делит произведение на d3.


Округленное в направлении нуля значение частного двойной длины, d4, заносится в стек. См. также */. D*/MOD "d-times-divide-mod" "D-умножить-разделить с остатком" MMS ( d1 d2 d3 -- d4 d5) Умножает d1 на d2 (промежуточный результат имеет 64 бита) и делит произведение на d3, засылая в стек остаток двойной длины d4 и целое, округленное в направлении нуля частное двойной длины d5. См. также */MOD. D+ "d-plus" "D-плюс" 83REQ 79REQ ( d1 d2 - d3) Складывает d2 и d1, а сумму двойной длины d3 засылает в стек. D- "d-minus" "D-минус" 83DBL 79DBL ( d1 d2 -- d3) Вычитает d2 из dl и засылает значение разности двойной длины в стек. D. "d-dot" "D-точка" 83DBL 79DBL ( d -) В соответствии со значением слова BASE отображает величину "d" (включая знак минус, если число отрицательно) в позиции на экране, отмеченной курсором. После вводится пробел. См. также. (точка). D.R "d-dol-r" "D-точка-R" 83DBL 79DBL ( d n --) Отображает число d в поле длиной n позиций так, что младшая цифра занимает в поле самое правое положение. Если число d отрицательно, перед ним ставится знак минус, В Форт-83, если число символов, необходимых для отображения d, больше n, дается сообщение об ошибке. В Форт-83 не разрешена также длина поля менее 1. В Форт-79 при n меньше 1 предшествующие числу пробелы опускаются, а при требуемом числе символов для отображения d больше n не дается сообщения об ошибке. (В большинстве версий Форт-79 результат будет напечатан без лидирующего пробела.) Смотри .R. D/ "d-divide" "D-разделить" MMS ( d1 d2 -- d3) Делит d1 на d2 и засылает частное двойной длины, округленное в сторону 0, в стек. D/MOD "d-divide-mod" "D-раэделить с остатком" MMS ( d1 d2 - d3 d4) Делит d1 на d2 и засылает в стек остаток двойной длины d3 и частное двойной длины d4, округленное в сторону нуля. D0= "d-zero-equals" "D равно нулю" 83DBL 79DBL ( d -- флаг) Сравнивает число d с нулем и засылает в стек флаг истинно, если d равно нулю.


D2/ "d-two-divide" "D-разделить на 2" 83DBL ( d1 -- d2) Делит d1 на 2 и засылает в стек частное двойной длины d2. Используется деление с нижней границей. D< "d-less-than" "D-меньше" 83REQ 79REQ ( d1 d2 -- флаг) Сравнивает числа d1 и d2 и засылает в стек флаг истинно, если d1 меньше d2. D= "d-equal" "D-равно" 83DBL 79DBL ( d1 d2 -- флаг) Сравнивает числа d1 и d2 и засылает в стек флаг истинно, если d1 равно d2. DABS "d-absolute" 83DBL 79DBL ( d1 - d2) Засылает в стек абсолютную величину числа двойной длины со знаком d1. Таким образом, d2 будет числом двойной длины, имеющим ту же величину, что и d1, но всегда положительным. Исключением является случай, когда в Форт-83 d1 равно -2.147.483.648. Для этого числа знак не изменяется. (Знак этого числа не изменяется и в большинстве версий Форт-79.) DARRAY "d-array" "D-массив" MMS ( n --) Слово-описатель, создающее линейный массив (вектор) чисел двойной длины. При использовании в форме n DARRAY

формирует в словаре статью с именем и резервирует место для n+1 числа двойной длины. Когда исполняется в форме: n

в стек засылается адрес (n+1)-го элемента. См. также 4ARRAY; ARRAY; CARRAY. Противоположно 2ARRAY. DECIMAL "decimal" 83REQ 79REQ ( --) Устанавливает для ввода-вывода десятичное представление чисел. Заносит 10 (десятичное) в переменную BASE. DEFINITIONS "definitions" "описания" 83REQ 79REQ ( --) Задает контекстный словарь, в котором компилируются описания. Именно этот словарь просматривается при поиске первым. В Форт-83 средства для изменения порядка просмотра словаря не предусмотрены. Это реализовано в Форт-79 путем присвоения переменной CURRENT значения переменой CONTEXT. Например, выполнение команды ASSEMBLER DEFINITIONS приведет к тому, что последующие описания окажутся в контекстном словаре ASSEMBLER. См. также VOCABULARY. DEPTH "depth" "глубина" 83REQ 79REQ ( - n) Засылает в стек число одинарной длины, равное числу кодов, лежащих в стеке до исполнения слова DEPTH.


Если стек пуст, n равно 0. DMAX "d-max" 83DBL 79DBL ( d1 d2 -- d3) Заносит в стек число d3, которое является большим из d1 и d2. См. также DMIN; MAX DMIN "d-min" 83DBL 79DDL ( d1 d2 -- d3) Засылает в стек d3, которое является меньшим из d1 и d2. См. также DMAX; MIN. DNEGATE "d-negate" 83REQ 79REQ ( d1 -- d2) Меняет знак числа d1 на обратный и заносит результат в стек. d2 является дополнением d1 по модулю два. (т.е. 0 минус d1). DO "do" "выполнить" I, С 83REQ 79REQ ( n1 n2 --) Подготавливает начало цикла do-loop. При использовании в форме: : ... п1 п2 DO ... LOOP ... ; или : ... at n2 DO ... приращение +LOOP ...; подготавливает начало цикла do-loop. Когда исполняется, DO берет числа n1 и n2 из стека и использует n2 в качестве начального значения индекса цикла, а n1 - в качестве предела, который определяет условие завершения цикла do-loop. Чтобы выяснить отличия между условиями завершения цикла в Форт-79 и Форт-83, смотри описания LOOP и +LOOP. Любой цикл do-loop выполняется по крайней мере один раз. Допускается вложение циклов do-loop, с помощью слова LEAVE можно прервать цикл до достижения предела. DOES> "does" "выполняет" I, С 83REQ 79REQ (-- адр) Определяет действие слова, сформированного словом-описателем, на фазе исполнения. Используется в форме : ... ... DOES> ... ; где соответствует CREATE или другому слову-описателю, которое использует CREATE, a - новое слово-описатель. (В действительности Форт-79 определяет, что должно быть словом CREATE, в то время как Форт-83 допускает вышеописанный вариант. Большинство версий Форт-79, однако, позволяют использование либо CREATE, либо слова-описателя с ним внутри.) DOES> отмечает начало описания , которое определяет поведение его производных слов. Таким образом, когда исполняется:

формируется в словаре статья с именем , а поведение слова при исполнений задается последовательностью слов между DOES> и ; в описании . DOES> можно использовать только внутри описания типа двоеточие.


Например, опишем CONSTANT: : CONSTANT CREATE , DOES> @ ; Более подробное описание смотри в гл. 11. См, также ;CODE. DROP "drop" "удалить" 83REQ 79REQ ( n -) Удаляет код n из стека. DU* "d-u-times" "d-u-умножить" MMS ( ud1 ud2 - uq) Умножает udl на ud2 (оба являются числами двойной длины без знака) и засылает в стек 64-битовое их произведение uq. DU/MOD "d-u-mod" MMS ( uq ud1 - ud2 ud3) Делит uq (64-битовое число без знака) на udl (число двойной длины без знака) и засылает остаток ud3 и частное ud4. DU< "d-u-less" "D-U-меньше" 83DBL 79DBL ( ud1 ud2 -- флаг) Сравнивает ud1 и ud2 (оба числа двойной длины без знака) и засылает в стек флаг истинно, если ud1 меньше ud2. DUMP "dump" 83CNT 79RES ТХТ MMS VAR (адр n --) Распечатывает содержимое n байтов памяти, начиная с адреса "адр". Каждая строка начинается с пропечатки адреса первого байта, в остальном все зависит от версии программы. (Приведенное описание предполагает наличие в стеке начального адреса и числа 16-байтовых строк, а не числа байтов. Это описание отображает байты в шестнадцатеричном представлении в ASCII-форме.) : DUMP ( адр n --) CR BASE @ >R HEX 16 * OVER + SWAP DO 10 TYPE 2 SPACES 16 0 DO I 4 MOD NOT IF SPACE THEN I J + С@ 0 TYPE SPACE LOOP CR 6 SPACES 16 0 DO I 4 MOD NOT IF SPACE THEN I J + C@ DUP 31 > OVER 127 < AND IF EMIT 2 SPACES ELSE DROP 3 SPACES THEN LOOP CR 16 +LOOP R> BASE ! ; DUP "dupe" "Задублировать" 83REQ 79REQ ( n - n n) Дублирует в стеке число одинарной длины n. Е "е" (for "edit") (для "EDIT") TXT MMS ( --) Редактирует блок, номер которого записан в SCR (обычно это блок, только что редактированный или выведенный на экран). ECARRAY "еrror-с-аrrау" TXT ( n--) Слово-описатель, создающее линейный массив (вектор) с байтовыми элементами. При использовании в форме n ECARRAY

формирует в словаре статью с именем и резервирует в памяти n+1 байт.


При использовании в форме n

в стек засылается адрес (n+1)-го элемента. Если n больше, чем число элементов в , или n меньше 0, выдается сообщение об ошибке. : ECARRAY CREATE DUP , 2 + ALLOT DOES> DUP @ 3 PICK U< IF + 2+ ELSE ." Index error" ABORT THEN ; Почти идентичен CARRAY, за исключением контроля ошибки. EDIT "edit" "редактировать" TXT MMS VAR (n --) Активизирует редактор Форта и редактирует блок n. См. гл. 12 и 13. EDITOR "editor" "редактор" 83CNT 79RSV ( --) Делает так, чтобы контекстный словарь EDITOR просматривался первым. (Многие версии Форта не используют отдельный контекстный словарь для редактора.) ELSE "else" "иначе" I, С 83REQ 79REQ ( --) Отмечает начало альтернативной ветви программы. При использовании в форме : ... флаг IF ... ELSE ... THEN ... ; компилирует оператор безусловного перехода, чтобы продолжать исполнение сразу после оператора THEN. Когда исполняется, IF предполагает наличие флага в стеке. Если флаг не равен 0, будут исполнены слова между IF и ELSE с продолжением после THEN, если же значение флага равно 0, управление будет передано словам между ELSE и THEN с продолжением после THEN. EMIT "emit" 83REQ 79REQ ( n --) Посылает символ, код которого лежит в младшем байте числа n, на активное выходное устройство (обычно дисплей), n, как правило, меньше 256. Форт-83 требует, чтобы только младшие 7 битов (т. е. ASCII-код) отображались, но это ограничение игнорируется в большинстве версий. EMPTY-BUFFERS "empty-buffers" "очистить буферы" 83CNT 79REQ ( --) Удаляет флаги спасения и стирает все коды приписки буферов к блокам. Помеченные для записи ранее блоки не будут записаны в массовую память. EMPTY-BUFFERS следует использовать, когда в массовую память может быть записана неверная информация. EMPTY- BUFFERS не нужно в стандарте Форт-83, так как стандарт запрещает помещать в буфер что-либо, что нельзя записать. (Но это требование часто игнорируется.) См.


также BLOCK; SAVE-BUFFERS; FLUSH. END-CODE "end-code" 83ASM 79ASM ( sys --) Завершает описание слова в Форт-ассемблере. При использовании в форме CODE ... END-CODE или : ... ... ;CODE ... END- CODE завершает описание, начатое оператором CODE или словом-описателем, которое использует ;CODE и позволяет находить слова или в словаре. Форт-79 требует также, чтобы оператор END-CODE преобразовал контекстный словарь в текущий. Используется для предотвращения нахождения в словаре или исполнения слова, описанного с ошибкой. Некоторые версии допускают, но не требуют END-CODE (например, MMSFORTH). ERASE "erase" "стереть" 83CNT 79RES MMS ( адр n --) Обнуляет n байтов в памяти, начиная с адреса "адр". Если n равно 0, ничего не производится. EXECUTE "execute" "исполнить" 83REQ 79REQ ( адр --) Исполняет слово, адрес поля программы "адр" которого лежит в стеке. Хотя Форт-83 требует, чтобы выдавалось сообщение об ошибке, если "адр" не является адресом поля программы, это очень трудно реализовать, и поэтому такое требование вообще игнорируется. Большинство версий разрушаются, если попытаться выполнить EXECUTE для произвольного адреса. EXIT "exit" "уход" 83REQ 79REQ ( --) Если встречается внутри слова-двоеточия, заставляет Форт "уйти" из этого слова и вернуться к исполнению слова, от которого произошло обращение. В большинстве версий EXIT может использоваться, чтобы досрочно завершить интерпретацию блока, возвратив управление клавиатуре. EXIT не может использоваться внутри цикла do-loop. Одной из функций ; является компиляция EXIT (или заменяющего слова) для завершения описания типа двоеточие. EXPECT "expect" 83REQ 79REQ ( адр n --) Прерывает исполнение программы, чтобы принять серию символов с клавиатуры и записать их в память. Символы запоминаются, начиная с адреса "адр", а запоминание продолжается в направлении старших адресов до тех пор, пока не будет введен символ "возврат каретки" (ASCII 13)- или пока не поступит п символов.


Все введенные и записанные в память символы отображаются на экране по мере их ввода. Код "возврат каретки" не будет записан в память. Ни одного символа не asder занесено в память, если n равно 0, Форт-79 требует также, чтобы в конце введенного текста по завершении EXPECT было записано два нуля. Форт-83 требует, чтобы возврат каретки был отображен как пробел. См. также SPAN. FENCE "fense" "ограда" MVP FIG VAR ( -- адр) Переменная, которая определяет адрес в словаре, ниже которого нельзя производить стирание словаря с помощью FORGET. FILL "fill" "запомнить" 83REQ 79REQ ( адр n1 n2 --) Заполняет n1 байтов памяти, начиная с адреса адр, кодом, содержащимся в младшем байте числа n2. Если n1 меньше или равно 0, ничего не делается. В Форт-83 n1 предполагается числом без знака и заполнение блокируется, если оно равно 0. FIND "find" "найти" 83REQ 79REQ FIND в Форт-83 и Форт-79 выполняют практически совершенно разные функции. Схема трансформации стека в форт-83 выглядит как (адр1 -- адр2 n) где "адр1" является адресом счетной строки, содержащей имя слова, которое должно быть найдено в словаре. Если не найдено, "адр2" равен "адр1", а n=0. Если найдено, "адр2" равен адресу поля программы , а "n" равно 1, если - слово немедленного исполнения, в противном случае значение "n" приравнивается минус единице. В Форт-79 схема преобразования стека имеет вид ( -- адр) или ( -- 0) где FIND используется в форме FIND

и заносит в стек либо адрес поля программы , либо нуль, если

в словаре не найдено. FL/ "f-l-divide" ТХТ ( n1 n2 -- n3) Используя операторы Форт-79, делит число n1 на n2 и засылает в стек округленное по нижней границе значение частного n3. Моделирует (медленно) оператор / Форт-83, используя Форт-79. : FL/ /MOD SWAP IF DUP 0 < IF 1- THEN THEN ; FL/MOD "M-divide-mod" TXT ( n1 n2 -- n3 n4) Используя операторы Форт-79, осуществляет деление с нижней границей n1 на n2 и засылает в стек остаток n3 и округленное значение частного n4.


Моделирует (медленно) оператор Форт-83 /MOD, используя Форт79. : FL/ MOD 2DUP FLMOD ROT ROT FL/ ; FLMOD "f-l-mod" TXT ( n1 n2 -- n3) Используя операторы Форт-79, выполняет деление с нижней границей n1 на n2 и засылает в стек остаток n3. Моделирует (медленно) оператор Форт-83 MOD, используя Форт-79. : FLMOD 2DUP FL/ * - ; FLUSH "flush" 83REQ MMS VAR ( --) Копирует содержимое всех блочных буферов, помеченных для спасения, в соответствующие блоки массовой памяти. Синоним - SAVE-BUFFERS в большинстве версий Форта. В Форт-83 требуется, чтобы приписка буферов к блокам была ликвидирована, в то время как SAVE-BUFFERS этого не требует. FORGET "forget" "забыть" 83REQ 79REQ ( --) При использовании в форме FORGET

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

найдено в контекстном словаре, куда вводились описания. ( В Форт-79 - это контекстный словарь CURRENT.) Если не найдено, дается сообщение об ошибке. FORTH "forth" 83REQ 79REQ ( --) Имя первичного контекстного словаря. Исполнение слова FORTH делает словарь FORTH первым и единственным, который просматривается при поиске слов. Новые описания становятся частью словаря FORTH до тех пор, пока с помощью DEFINITIONS не будет сделан контекстным другой словарь. См. также CURRENT; CONTEXT; DEFINITIONS; VOCABULARY. FORTH-83 "forth-83" 83REQ ( --) Сообщает, соответствует ли система стандарту Форт-83. Если стандартная система Форт-83 не используется, слово не будет найдено, а будет дано сообщение об ошибке. HERE "here" "здесь" 83REQ 79REQ ( -- адр) Засылает в стек адрес очередной свободной позиции в словаре, указатель словаря. HEX "hex" 83CNT 79RES TXT MMS Выбирает для ввода-вывода шестнадцатеричную систему счисления. : HEX 16 BASE ! ; HI# "high-number" MMS ( --n) MMSFORTH воспринимает все числовые вводы как числа двойной длины, помещая число двойной длины в стек, если входная последовательность содержит десятичную точку, и посылая в стек число одинарной длины в противном случае.


В обоих вариантах QUAN НI# содержит старшие 16 битов последнего из введенных чисел. HOLD "hold" 83REQ 79REQ Вводит символ с ASCII-кодом n в форматированную цифровую выходную строку. Используется между . См., например, #. I "i" 83REQ 79REQ ( - n) или ( -- u) Заносит в стек индекс цикла do-loop. Может использоваться только непосредственно, а не в словах, к которым происходит обращение в цикле do-loop. См. также I'; J; К. I' "i-prime" 83UNC 79REQ MMS ( - n) или ( - u) Засылает в стек индекс цикла при использовании в слове типа двоеточие, к которому происходит обращение в цикле do-loop. См. также I; J'. IF "if" "если" I С 83REQ 79REQ (флаг --) Открывает одно- или двухветвевую структуру. Используется в форме : ... флаг IF ... THEN ... ; или : ... флаг IF ... ELSE ... THEN ... ; Когда исполняется, оператор IF предполагает наличие в стеке флага. Если флаг не равен 0, исполняются слова между IF и ELSE (или слова между IF и THEN, если ELSE не используется). Но если значение флага равно 0, управление передается словам между ELSE и THEN (или слову после THEN, если ELSE отсутствует). В обоих случаях исполнение продолжается после THEN. Структуры IF...ELSE...THEN допускают вложения. IMMEDIATE "immediate" "немедленное" 83REQ 79REQ ( --) Помечает только что созданное слово словаря так, что оно будет исполнено (а не скомпилировано) даже если Форт находится в режиме компиляции. IN$ "in-string" "ввод строки" MMS ( -- адр) Отображает Запрос "?" и ожидает ввода с клавиатуры строки, завершающейся кодом "возврат каретки". Счетная строка засылается в буфер PAD, адрес которого "адр" кладется в стек. См. также $IN. INDEX "index" "индекс" 83UNC 79RES MMS ( n1 n2 --) Отображает верхние строки каждого из блоков в диапазоне от n1 до n2. n2 - в большинстве версий Форта верхняя граница диапазона, а в MMSFORTH - число блоков. INKEY$ "in-key-string" MMS ( -- адр) Создает в PAD односимвольную счетную строку, содержащую код символа нажатой клавиши, в стек засылается адрес PAD в виде "адр".


Если не нажато никакой клавиши, то при исполнении INKEY$ строка в PAD не будет содержать ничего (байт-счетчик равен 0). INKEY$ не ждет ввода. INSTR "in-s-t-r" MMS ( адр1 адр2 -- n) Производит поиск строки, хранящейся по адресу "адр2" в строке, начинающейся с адреса "адр1". Если поиск успешен, в стек заносится начальная позиция этой строки по отношению "адр1", в противном случае-нуль. IS "is" MMS ( n --) Записывает число в слово типа QUAN. При использовании в форме: n IS

записывает n в слово типа QUAN с именем . n - число с длиной, соответствующей CQUAN, QUAN, 2QUAN или 4QUAN. Противостоит AT. J "j" 83REQ 79REQ ( -- n) Используется во вложенных циклах do-loop в форме DO ... DO ... J ... LOOP ... +LOOP ; Засылает в стек значение индекса очередного внешнего цикла, в данном примере цикла, завершающегося оператором +LOOP. Подобно I, J может использоваться только непосредственно, а не внутри другого слова, к которому происходит обращение внутри цикла. J' "J-prime" TXT ( --) Выполняет функцию J, во внутри слова типа двоеточие, к которому происходит обращение внутри цикла. Аналог I'. : J' R> R> R> R> R@ SWAP >R SWAP >R SWAP >R SWAP >R ; К "k" 83CNT 79RSV ( -- n) Используется во вложенных циклах do-loop в форме DO...DO...DO...K...+LOOP...+LOOP...LOOP Засылает в стек значение индекса цикла второго по отношению к тому, где применено К, в данном случае цикла, завершаемого оператором LOOP. См. также I, J. KEY "key" "клавиша" 83REQ 79REQ ( --n) Приостанавливает исполнение программы и ждет нажатия клавиши, после чего помещает в стек ее ASCII-код. Символ, полученный KEY на экране не отображается [Форт-83 требует, чтобы вводимый код был не более 127 (7 бит), но фактически все версии игнорируют это требование и допускают прием восьми битов (байта), т. е. кодов до 255.] L "list" MMS VAR ( --) Отображает блок, номер которого содержит переменная SCR, обычно это блок, который только что отображался или редактировался. : L SCR @ LIST ; L>NAME "link-to-name" 83FLD ( адр1 - адр2) Исходный код "адр1" - адрес поля связи слова, засланный в стек код"адр2" - адрес поля имени этого слова.


LABEL "label" "метка" ТХТ MMS ( --) Слово-описатель, которое позволяет создавать именованные машинные программы, написанные на Форт-ассемблере. При исполнении в форме LABEL

формируется в словаре статья с именем и в качестве контекстного словаря выбирается ASSEMBLER, с которого и начинается поиск. Это позволяет описать с применением мнемоники ассемблера. Когда

исполняется, в стек заносится адрес его поля параметров, пригодный для использования словом ассемблера CALL. : LABEL CREATE [COMPILE] ASSEMBLER ; Подробности -гл. 16. LEAVE "leave" "уйти" 83REQ 79REQ ( --) Вызывает немедленное прерывание цикла do-loop. Исполняется в форме : ... DO ... LEAVE ... LOOP ... ; Когда LEAVE встречается в тексте программы, цикл do-loop прерывается. Это делается обычно при выполнении определенного условия в структуре IF...THEN. При прерывании цикла в Форт-83 слова между LEAVE и LOOP или +LOOP не исполняются, в то время как в Форт-79 они выполняются. В обоих случаях исполнение продолжается со слова после LOOP. LEFT$ "left-string" MMS ( адр1 n - адр2) Извлекает n символов из начала счетной строки с адресом "адр1" и создает новую счетную строку в PAD. В стек засылается адрес PAD (адр2). LEN "len" MMS ( адр -- n) Засылает в стек длину счетной строки с адресом "адр". Эквивалент С@. LFA "l-f-a" FIG VAR (адр1 - адр2) Исходный код "адр1" - адрес поля параметров слова, в стек заносится "адр2" - адрес поля связи этого слова. LINK> "from-link" 83FLD ( адр1 - адр2) Исходный код "адр1" - поле связи слова, в стек заносится "адр2" - адрес поля программы этого слова. LIST "list" I 83CNT 79REQ ( u --) Отображает содержимое блока u. Переменной SCR присваивается значение u. LISTS "lists" MMS ( n1 n2 --) Отображает n2 блоков, начиная с блока nl, каждый из блоков представляется в формате LIST. LIT "lit" FIG VAR ( -- n) Слово, компилируемое LITERAL для того, чтобы заносить в стек следующее за ним в словаре 16-битовое число.


Подробности в гл. 15. См. также COMPILE. LITERAL "literal" "литерал" I, С 83REQ 79REQ ( n --) Обычно используется в форме : ... [ n ] LITERAL ... ; Компилирует LIT (или его эквивалент), а вслед за ним - число (n), которое в момент компиляции лежит в стеке. Когда исполняется, n заносится в стек. Подробности в гл. 15. LL "list-last" TXT MVP ( --) Отображает блок, предшествующий по номеру блоку, который только что отображался или редактировался. LN "list-next" ТХТ MVP ( --) Отображает блок, следующий по номеру за блоком, который только что отображался или редактировался. LOAD "load" "загрузить" 83REQ 79REQ ( u -) Начинает интерпретацию блока "u", сделав его "входным потоком". Значения >IN и BLK сохраняются, после чего производится интерпретация блока. Если интерпретация в явной форме не прерывается, она будет прекращена, когда входной поток иссякнет. Когда загрузка выполнена, интерпретация продолжается с места, откуда было выполнено обращение ( т.е. восстанавливаются прежние значения переменных >IN и BLK). LOADS "loads" ТХТ MMS ( n1 n2 --) Загружает n2 блоков, начиная с блока n1. : LOADS OVER + SWAP DO I LOAD LOOP ; LOOP "loop" "цикл" I C 83REQ 79REQ ( --) При использовании в форме : ... DO ... LOOP ... ; определяет конец цикла do-loop. Когда исполняется, DO устанавливает начальное значение индекса и предела цикла. По завершении очередного цикла LOOP дает единичное приращение индексу цикла. В Форт-83, если в результате приращения индекс перешел границу между пределом минус 1 и пределом, цикл завершается. В Форт-79 цикл завершается не при переходе через эту границу, а при индексе, большем или равном пределу. Если цикл не прерван, управление передается слову, следующему за DO. Смотри обсуждение прерывания циклов в гл. 8. См. также +LOOP; DO. М* "m-limes" "М-умножить" MMS ( n1 n2 -- d) Перемножает два числа одинарной длины n1 и n2, засылая в стек произведение двойной длины d.


Используется, если возможно переполнение при *. М*/ "m-times-divide" "М-умножить-разделить" MMS ( d1 n1 n2 -- d2) Умножает содержимое d1 на n1 и делит произведение на n2, В стек засылается частное d2. Результат умножения d1 на п1 для предотвращения арифметического переполнения величина d1*n1 имеет промежуточный 48- битовый формат (тройная длина). М+ "m-plus" "М-плюс" MMS (d1 n --d2) Складывает значения содержимого n и d1, засылает в стек сумму двойной длины d2. М- "m-nunus" "М-минус" MMS ( d1 n - d2) Вычитает содержимое n из d1, засылает в стек разность двойной длины. М/ "m-divide" "M-разделить" MMS ( d n1 -- n2) Делит d на n1, засылает в стек частное одинарной длины n2 (округление в сторону нуля). M/MOD "m-divide-mod" "М-разделить с остатком" MMS ( d n1 - n2 n3) Делит d на n1, засылает в стек остаток n2 одинарной длины и частное одинарной длины n3 (округление в сторону нуля). MAX "max" "макс" 83REQ 79REQ ( n1 n2 -- n3) Засылает в стек число п3, которое является большим из n1 и n2. См. также DMAX; MIN. MID$ "mid-string" "MID-строка" MMS ( адр1 n1 n2 -- адр2) Извлекает счетную подстроку из счетной строки с адресом адр1, начиная с адреса адр1+n1, копирует n2 символа в новую строку и укладывает ее в PAD, адрес которого адр2 заносится в стек. MIN "min" "мин" 83REQ 79REQ ( n1 n2 -- n3) Засылает, в стек число n3, которое является меньшим из n1 и n2. См. также DMIN; MAX. MOD "mod" "остаток" 83UNC 79REQ ( n1 n2 -- n3) Делит n1 на n2 и засылает в стек остаток n3. В Форт-83 используется деление с нижней границей, в то время как в Форт-79 частное округляется в направлении нуля. В Форт-83 при делителе, равном 0, или при частном вне диапазона -32.768 - 32.767 дается сообщение об ошибке. MOVE "move" "перенести" 83UNC 79REQ ( адр1 адр2 n --) Переносит n чисел одинарной длины, начиная с адреса адр1 в память, начиная с адреса "адр2".


Перенос происходит от младших адресов в направлении старших. Форт-79 предписывает, что n - число одинарной длины со знаком, если n меньше или равно 0, ничего не переносится. В Форт-83 n - число без знака и, если n равно 0, перенос не производится. См. также CMOVE; . MYSELF "myself" MMS VAR ( --) Позволяет слову обращаться к самому себе. При использовании в форме : ... MYSELF ... ; в поле параметров компилируется адрес поля программы , причем место в поле параметров задается положением слова MYSELF в описании. Чтобы обеспечить уход из цикла, MYSELF обычно вводится внутрь условных структур, в противном случае цикл будет бесконечным. Синоним - RECURSE. Обсуждение рекурсии в Форте смотри в гл. 15. N>LINK "name-to-link" 83FLD (адр1 -- адр2) Исходный код адр1 - адрес поля имени слова, в стек засылается адр2 - адрес поля связи этого слова. NAME> "from-name" 83FLD ( адр1 - адр2) Исходный код адр1 - адрес поля имени слова, в стек заносится адр2 - адрес поля программы этого слова. NCASE "n-case" MMS ( n --) Открывает цифровую CASE- структуру. Формат использования: NCASE n1 n2 n3 " OTHERWISE... CASEND Список чисел (здесь n1, n2 и n3) завершается пробелом и двойной кавычкой, используется для выбора и исполнения слова из списка слов, следующего за ". Используются только 8 младших битов каждого числа. Таким образом, если в стеке n1, управление будет передано , аналогично, если в стеке n2, управление передается . Когда выбранное слово исполнено, управление передается слову, следующему за CASEND. Если число в стеке не соответствует ни одному из чисел в списке, исполнение продолжится со слова после OTHERWISE (если оно присутствует) или после CASEND. См. также ACASE. NEGATE "negate" "сменить знак" 83REQ 79REQ (n1 -- n2) Реверсирует знак числа n1 и заносит в стек результат в виде n2. n2 - дополнение n1 по модулю два (т.е. нуль минус n1). NEXT "next" "следующий" MMS VAR ( --) Слово MMSFORTH-ассемблера, которое компилирует оператор перехода ко внутреннему интерпретатору, таким образом завершая описание слова ассемблера.


Другие версии могут использовать слова с другим именем для реализации этой функции. Подробности в гл. 16. NFA "n-f-a" FIG VAR ( адр1 -- адр2) Исходный код адр1 - адрес поля параметров слова, в стек заносится адр2 - адрес поля имени этого слова. NIP "nip" ( n1 n2 -- n2) Ликвидирует второе сверху число в стеке. Эквивалентно : NIP SWAP DROP ; NOT "not" 83REQ 79REQ NOT описано совершенно по разному в Форт-83 и в Форт-79. Схема преобразования стека в Форт-83 имеет вид ( n1 -- n2) - где n2 - дополнение n1 по модулю один. То есть все биты n2 реверсированы по отношению к n1. Схема преобразования стека в Форт79 имеет вид ( флаг1 -- флаг2) где флаг1 имеет обратное значение истинности по отношению к флаг2. Описание в Форт-79 эквивалентно 0=, т.е. флаг истинно (не 0) будет преобразован в нуль, а флаг ложно (0) - во флаг истинно (1). NUMBER "number" 83UNC 79RES MMS Обычно ( адр - d) MMSFORTH (адр1 - n адр2) или (адр1 - d адр2) преобразует счетную строку с адресом адр в 32-разрядное целое число со знаком, при этом учитывается значение - BASE, результат заносится в стек. Если цифровое преобразование не возможно, дается сообщение об ошибке. Строка может содержать в начале знак минус. NUMBER в MMSFORTH засылает в стек число одинарной или двойной длины в зависимости от того, содержит ли строка код десятичной точки. Переменным НI# и #РТ присваиваются соответствующие значения, адр2 - адрес первого непреобразуемого символа. OCTAL "octal" 83CNT 79RES MMS ( --) Выбирает восьмеричную систему счисления для ввода-вывода. : OCTAL 8 BASE ! ; OR "OR" "ИЛИ" 83REQ 79REQ (n1 n2 --n3) Выполняет побитовую операцию ИЛИ над числами n1 и n2 и засылает результат в виде n3. Таким образом, каждый бит числа n1 сравнивается с соответствующим битом n2, и если один из них или оба равны 1, то соответствующий бит n3 будет равен 1; в противном случае этот бит будет равен 0. В двоичной форме 110 100 OR занесет в стек двоичное 110. См. также AND; XOR.


OTHERWISE "otherwise" "в противном случае" MMS ( --) Может использоваться в структурах ACASE или NCASE для того, чтобы пометить место продолжения исполнения программы, если условие не выполнено. Смотри, например, ACASE и NCASE. (Заметьте, что это слово в MMSFORTH полностью не совпадает со словом Форт-83 из неконтролируемого списка и словом Форт-79 из контролируемого списка.) OVER "over" "через" 83REQ 79REQ ( n1 n2 -- n1 n2 n1) Копирует второе сверху число в стеке на верх стека. PAD "pad" 83REQ 79REQ ( --) Заносит в стек самый "нижний" адрес буфера, которой может быть использован для временного хранения информации. Адрес PAD изменяется, а данные, записанные там, теряются, если изменяется адрес следующей свободной ячейки словаря (засылаемый в стек HERE), т.е. если что-то будет добавлено в словарь. Минимальная емкость PAD задается в Форт-83 равной 84 символам и в Форт-79 - 64 символам. PAGE "page" "страница" 83UNC 79RES MMS ( --) Очищает экран терминала и помещает курсор в верхний левый угол. При выводе на печать выдается код "перевод страницы". PCRT "р-c-r-t" MMS ( --) Обеспечивает вывод на печать и экран (ЭЛТ) одновременно. PEMIT "p-emit" MVP Аналог EMIT, но посылает символ не на видеотерминал, а на печатающее устройство. PFA "p-f-a" FIG VAR ( адр1 - адр2) Исходный код адр1 - адрес поля имени слова, в стек заносится адр2 - адрес поля параметров этого слова. PICK "pick" 83REQ 79REQ (n1 --n2) Копирует n1-й код в стеке и заносит его на верх стека. Само число n1 при этом не считается. В Форт-83 верхний элемент стека имеет номер нуль, в то время как в Форт-79 - один. Таким образом, 0 PICK эквивалентно DUP в Форт-83 и 1 PICK в Форт-79. В большинстве версий PICK - очень медленная команда по сравнению с другими операторами стека. PLIST "p-lists" MMS ( nl n2 --) Отображает n2 блоков, начиная с n1. Формат выдачи приспособлен для печати, строки пронумерованы, а блоки группируются по три на странице.


РР "р-р" ТХТ FIG MVP VAR ( n1 n2 ->) При использовании в форме n1 n2 РР

замещает строку n2 блока n1 , следующим за РР.

завершается кодом . PRINT "print" "печатать" MMS ( --) Переадресует вывод на печатающее устройство. PSH "push" TXT MMS ( --) Слово ассемблера MMSFORTH, которое компилирует машинную программу, засылающую содержимое одного машинозависимого двойного регистра в стек с последующей передачей управления внутреннему интерпретатору. Используется для завершения описания code-слов. Выполняет функцию NEXT. См. также PSH2. PSH2 "push-two" ТХТ MMS ( --) Слово ассемблера MMSFORTH, которое компилирует машинную программу, засылающую содержимое двух машинозависимых двойных регистров в стек с последующей передачей управления внутреннему интерпретатору. Используется для завершения описания code-слов. Выполняет функцию NEXT. См. также PSH. PSH3 "push-two" TXT ( --) Слово ассемблера MMSFORTH, которое компилирует машинную программу, засылающую содержимое трех машинозависимых двойных регистров в стек с последующей передачей управления внутреннему интерпретатору. Используется для завершения описания code-слов. Выполняет функцию NEXT. См. также PSH. PTC "p-t-c" MMS ( n1 n2 --) Помещает курсор в строку n1 и столбец n2-экрана дисплея. QUAN "quan" MMS Слово-описатель QUAN-типа - для чисел одинарной длины. При исполнении в форме QUAN

формирует в словаре статью с именем и резервирует место для числа одинарной длины. При использовании самого число, которое оно содержит, заносится в стек. Когда перед ним стоит IS, число из стека заносится в поле параметров . Если перед ним стоит AT, в стек заносится адрес поля параметров . (Обсуждение QUAN смотри в гл. 7). См. также CQUAN; 2QUAN; 4QUAN. QUERY "query" 83CNT 79REQ ( --) Приостанавливает работу программы на время приема символов с клавиатуры и записи их в текстовый входной буфер. Передача завершается, когда внесен код "возврат каретки" или заполнен весь входной буфер (стандарт требует, чтобы буфер вмещал не менее 80 символов).


Форт-83 требует сброса величин >IN и BLK в нуль и приравнивая значения # ТIВ значению SPAN. Для приема текста из буфера может использоваться оператор WORD. См. также >IN; #TIB; BLK; EXPECT; SPAN; WORD. QUIT "quit" 83REQ 79REQ ( --) Вызывает немедленный уход из программы и передачу управления оператору. Очищает стек возвратов и подготавливает систему для интерпретации данных, поступающих с активного устройства (обычно клавиатуры). Стек параметров не очищается (в отличие от ABORT), и никаких сообщений или запросов на экран не выдается (даже "ok"). См. также ABORT. R/ "round-divide" "деление с округлением" ТХТ ( n1 n2 -- n3) Делит n1 на n2 и засылает в стек частное n3, которое округлено в большую сторону, если остаток больше n2/2. R> "r-from" "из-R" 83REQ 79REQ ( -- n) Удаляет n из стека возвратов и помещает его в стек параметров. R> вообще должен использоваться в паре с >R, чтобы исключить изменение указателя стека возвратов. См. также R@; >R. R@ "r-fetch" "занести R" 83REQ 79REQ (-- n) Копирует n из стека возвратов в стек параметров (без изменения стека возвратов). R@ полезно, когда стек возвратов используется для временного хранения чисел внутри описаний типа двоеточие. См. также >R; R>. RBLK "r-block" "r-блок" MMS ( адр n --) Читает блок n и укладывает его в память, начиная с адреса адр. См. также WBLK. RECURSE "recurse" "рекурсия" 83CNT ( --) Синоним MYSELF. REPEAT "repead" "повторить" I, С 83REQ 79REQ ( --) Завершает цикл BEGIN... WHILE... REPEAT. При использовании в форме: : ... BEGIN ... флаг WHILE ... REPEAT ... ; компилирует безусловный переход на BEGIN в описании слова . Когда исполняется, слова между BEGIN и REPEAT повторно повторно до тех пор, пока флаг в стеке остается не равным 0. Если флаг соответствует ложно (0), управление передается слову, следующему после REPEAT. См. также BEGIN; WHILE; UNTIL.


RIGHT$ "right-string" "правая строка" MMS ( адр1 n - адр2) Берет n символов с правого конца счетной строки, лежащей по адресу адр, формирует новую счетную строку в PAD, адрес которого заносит в стек. ROLL "roll" 83REQ 79REQ ( ... n -) Удаляет n-й элемент из стека (не считая n) и заносит его на верх стека, смежные числа смещаются вниз на одну позицию. В Форт-83 верхний элемент имеет номер 0, так что, например, 2 ROLL эквивалентно ROT; его эквивалентом в Форт-79 является 3 ROLL, так как здесь верхняя позиция стека имеет номер 1. ROT "rote" 83REQ 79REQ ( n1 n2 n3 -- n2 n3 n1) Переносит третий сверху элемент на верх стека. RUP/ "round-up-divide" "деление с округлением в большую сторону" ТХТ ( n1 n2 -- n3) Делит n1 на n2 и заносит в стек частное n3, округленное в большую сторону, если остаток не равен 0. Описание в Форт-79: : RUP/ /MOD SWAP 0= 0= + ; Описание в Форт-83: : RUP/ /MOD SWAP 0= 0= NEGATE + ; S-D "single-to-double" "одинарное в двойное" ТХТ ( n -- d) Преобразует число одинарной длины в число двойной длины, сохранив правильный знак. Описание в Форт-79: : S-D DUP 0< NEGATE ; Описание в Форт-83: : S-D DUP 0< ; SAVE-BUFFEBS "save-buffers" "сохранить буферы" 83REQ 79REQ ( --) Копирует содержимое всех блочных буферов, помеченных оператором UPDATE, в соответствующие блоки массовой памяти. Все буферы помечаются так, как если бы они не были модифицированы, но Форт-83 допускает сохранение приписки к определенным буферам, что зависит, конечно, от версии. См. также FLUSH. SCR "s-c-r" 83CNT 79REQ ( - адр) Переменная, содержащая номер блока, которой был только что отображен (и во многих версиях блок, который только что редактировался). SIGN "sign" "знак" 83REQ 79REQ ( --) Добавляет ASCII-код "-" (знак минус) в начало отформатированной числовой выходной строки, если n отрицательно. Использование между не является обязательным (но типичным) в Форт-83.


Форт-79 требует этого в обязательном порядке. См., например, #. SMUDGE "smudge" FIG MVP VAR ( --) Меняет состояние бита (бита-метки) в заголовке только что описанного слова так, чтобы разрешить или нет нахождение этого слова при просмотре словаря. Если слово может быть найдено, SMUDGE пометит его так, что его уже нельзя будет найти. Повторное выполнение SMUDGE сделает его "находимым" снова. В процессе описания слова бит-метка устанавливается так, что слово нельзя найти, исполнение SMUDGE делает его находимым. Это еще один из нескольких методов предотвращения исполнения описаний, содержащих ошибки. SP@ "s-p-felch" "занести SP" 83CNT 79RES MMS VAR ( - адр) Заносит в стек адрес верхнего элемента стека параметров до исполнения слова SP@. SPACE "Space" "пробел" 83REQ 79REQ ( --) Посылает код пробела (ASCII 32) на активное в данный момент выходное устройство. SPACES "spaces" "пробелы" 83REQ 79REQ ( n --) Посылает n кодов пробела на активное в данный момент выходное устройство. Если n равно 0 или отрицательно, ничего не отображается. SPAN "span" 83REQ ( - адр) Переменная, которая содержит число символов, введенных и запомненных при последнем исполнении EXPECT. Подробности в гл. 8. SSIGN "s-sign" TXT ( n d1 -- d2) Помещает знак n в форматированную числовую выходную строку, предназначенную для отображения числа n. Должно использоваться с ... флаг IF ... THEN ... ; или : ... флаг IF ... ELSE ... THEN ... ; отмечает место, откуда продолжится исполнение по отношению к соответствующим IF или ELSE. Когда IF конструкция завершена, исполнение продолжается с оператора, стоящего за THEN. THRU "through" 83CNT 79RES MVP VAR (n1 n2 --) Последовательно загружает блоки от nl до n2. См. также LOADS. TIB "t-i-b" 83REQ MMS VAR ( - адр) Заносит в стек адрес начала входного текстового буфера (иногда называемого "терминальным входным буфером"). Этот буфер используется для приема символов, поступающих с клавиатуры.


TL "t-l" MMS ( n1 n2 -) Отображает строки от n1 до n2 (с номерами строк) блока, номер которых лежит в SCR. Таким образом, команда 0 15 TL отобразит весь блок, номер которого записан SCR. TOKEN "token" "лексема" MMS (n адр1 - адр2) Переносит строку символов (лексему), лежащую по адресу "адр1", и укладывает в виде счетной строки, начиная с адреса, указанного словом HERE, игнорируя предшествующие пробелы и используя символ с ASCII-кодом n в качестве разграничителя. Копия разграничителя записывается после выделенной лексемы, но не учитывается в байт-счетчике строки. адр2 равен адресу символа, следующего за разграничителем в блочном буфере, или 0, если лексема не выделена. Слово TOKEN используется в описании слова WORD в MMSFORTH и полезно для выделения строк из массивов данных. TRAVERSE "traverse" "траверс" FIG MVP VAR ( адр1 n - адр2) Находит адрес противоположного края поля имени слова в словаре при начальном адресе адр1. Если n равен 1, поиск производится в направлении больших адресов, при n, равном 0, - в направлении меньших. Во многих версиях Форта первый и последний байты поля имени откомпилированного слова имеют старший бит, установленный равным 1 (т.е. имеют значение больше 80 шестнадцатеричного ). Это позволяет TRAVERSE найти начало или конец поля имени бесконечной длины, вычислить другие адреса в откомпилированном описании. Используется в NFA и PFA. TUCK "tuck" TXT F83 ( n1 n2 - n2 n1 n2) Копирует верхний элемент n2 и "подсовывает" его под второй сверху элемент n1. Может быть описано как : TUCK SWAP OVER ; но в версии F83 слово TUCK описано на ассемблере с целью ускорения его работы. TYPE "type" "отобразить" 83REQ 79REQ ( адр n --) Отображает строку из n символов, хранящуюся в памяти по адресу адр. Если n равно 0 или меньше 0, ничего не отображается. См. также COUNT. U* "u-times" "U-умножить" 79REQ ( u1 u2 - ud) Умножает ul на u2 и засылает в стек произведение двойной длины ud.


Все коды рассматриваются как числа без знака. Синоним слова UM*, используемого в Форт-83. U. "u-dot" "U-точка" 83REQ 79REQ ( n --) Отображает число без знака и в позиции, отмеченной курсором. После числа вводится пробел. См. также . . U.BIN "u-dol-binary" TXT ( u -- u) Отображает число без знака, лежащее в стеке в двоичном представлении, не изменяя состояния стека или величины BASE. : U.BIN DUP BASE @ 2 BASE ! SWAP U. BASE ! ; U.R "u-dot-r" 83CNT 79RES MMS ( u n -) Отображает величину числа без знака u с учетом величины BASE в поле шириной n позиций. Младшая цифра u помещается в самую правую позицию. В Форт-83, если число символов, необходимое для отображения u, больше n, дается сообщение об ошибке. Ширина поля меньше 1 запрещена. В Форт-79, если n меньше числа символов, число будет отображено, но без предшествующих пробелов. U/MOD "u-div" de-mod" "U-разделить с остатком" 79REQ ( ud1 u1 -- u2 u3) Делит число двойной длины ud1 на u1 и засылает в стек остаток одинарной длины u2 и частное одинарной длины u3. Применено деление с нижней границей. Все величины рассматриваются как числа без знака. Синоним U/MOD в Форт-83. U< "u-less-lhan" "U-меньше" 83REQ 79REQ ( u1 u2 - флаг) Сравнивает u1 и u2 и заносит в стек флаг истинно, если u1 меньше чем u2. UD. "u-d-dot" TXT ( d -) Отображает число двойной длины без знака, лежащее в стеке, в соответствия с величиной BASE. После числа вводится пробел. : UD. TYPE SPACE ; UD.R "u-d-dot-r" TXT ( ud n --) Отображает число двойной длины без знака, лежащее в стеке, в поле шириной n позиций. Причем младшая цифра числа помещается в самую правую позицию. UM* "u-m-times" "U-M-умножить" 83REQ ( u1 u2 -- ud) Перемножает числа u1 и u2 и заносит в стек произведение двойной длины ud. Все величины рассматриваются как числа без знака. Синоним U* в Форт79. UM/MOD "u-m-divide-mod" "UM-разделить с остатком" 83REQ ( ud u1 -- u2 u3) Делит число двойной длины без знака ud на u1 и заносит в стек остаток одинарной длины u2 и частное одинарной длины u3.


Все величины рассматриваются как числа без знака. Синоним U/MOD в Форт-79. UNTIL "until" I, С 83REQ 79REQ (флаг -) Отмечает конец бесконечного цикла. При использовании в форме : ... BEGIN ... флаг UNTIL ... ; компилирует условный переход назад к соответствующему BEGIN. Когда

исполняется, слово UNTIL предполагает наличие в стеке флага и, пока флаг равен 0, передает управление назад к соответствующему слову BEGIN. Если флаг не равен 0, исполнение продолжается со слова после UNTIL. См. также BEGIN; WHILE; REPEAT. UPDATE "update" "поместить" 83REQ 79REQ ( --) Помечает блочный буфер как модифицированный и готовый для записи в массовую память. Блоки в буферах, помеченные таким образом, автоматически переносятся в массовую память, когда буфер требуется повторно. Помеченные блоки могут быть записаны в массовую память с помощью оператора FLUSH или SAVE-BUFFERS. EMPTY-BUFFERS ликвидирует статус пометки и уничтожает приписку всех блочных буферов, отменяя воздействие оператора UPDATE. VAL "val" MMS ( адр - n) Преобразует числовые символы, лежащие в счетной строке по адресу "адр", в число одинарной длины n в соответствии со значением слова BASE. См. также STR$. VARIABLE "variable" "переменная" 83REQ 79REQ ( --) Слово-описатель, которое создает переменную одинарной длины. При использовании в форме VARIABLE

формирует в словаре статью с именем и резервирует место в памяти для числа одинарной длины. Когда исполняется, в стек заносится адрес поля параметров слова , пригодный для использования @ и !. Переменной не обязательно присваивается какое-либо начальное значение. См. также CVARIABLE; 2VARIABLE; 4VARIABLE. VLIST "v-list" "полный список" FIG ( --) Отображает список всех слов в текущем (CURRENT) словаре. В настоящее время для этого слова предпочтительнее имя WORDS. VOCABULARY "vocabulary" "контекстный словарь" 83REQ 79REQ ( --) Слово-описатель, которое создает новый контекстный словарь.


При использовании в форме VOCABULARY

формирует в словаре слово с именем , которое специфицирует новый список описаний слов. В зависимости от версии может быть, а может и не быть словом немедленного исполнения. После исполнения

контекстный словарь станет первым просматриваемым (текущим словарем). может быть сделан контекстным словарем, куда заносятся новые описания (CONTEXT-словарем) с помощью DEFINITIONS что приведет к тому, что новое описание будет включено в маршрут поиска Подробности в гл. 14. WBLK "write-block" MMS ( адр n -) Записывает 1024 байта, начиная с адреса "адр", в блок с номером n. См. также BLK. WHILE "while" I,C 83REQ 79REQ ( флаг -) Решает прервать или продолжить цикл BEGIN... WHILE... REPEAT. При использовании в форме : BEGIN ... флаг WHILE ... REPEAT ... ; компилирует оператор условного перехода в описание . Когда

исполняется, WHILE предполагает наличие в стеке флага, пока флаг не равен 0, слова между WHILE и соответствующим REPEAT выполняются, a REPEAT возвращает управление слову, стоящему после соответствующего BEGIN. Если же флаг равен 0, управление передается слову, следующему за REPEAT. WIDTH "width" "ширина" FIG MVP ( -- адр) Переменная, содержащая число символов, которое будет скомпилировано в поле имени описания, т. е. максимальная длина имени слова. Слово WIDTH можно использовать для ограничения длин имен слов с целью экономии места в словаре. По умолчанию максимально допустимая длина имени равна 31 символу. WORD "word" "слово" 83REQ 79REQ ( n - адр) Генерирует счетную строку, извлекая последовательность символов из выходного потока, не видоизменяя его, до тех пор, пока не встретится разграничитель, ASCII-код которого равен п, или пока не иссякнет входной поток. Не вызывает прерывания исполнения. Разграничители, предшествующие строке, игнорируются. Символы запоминаются в счетной строке, начиная с адреса "адр". (В большинстве версий "адр" равен HERE.) Примеры и обсуждения см.


в гл. 9. WORDS "words" "слова" 83REQ 79REQ ( --) Отображает список всех слов в текущем словаре. Контекстная форма представления варьируется от версии к версии. Синоним VLIST. XOR "х-or" "Исключающее ИЛИ" 83REQ 79REQ (n1 n2 --n3) Выполняет побитовую операцию исключающее ИЛИ для кодов n1 и n2, результат n3 заносится в стек. Другими словами, каждый бит кода n1 сравнивается с соответствующим битом кода n2 и, если один из них (но не оба) равен 1, приравнивается 1 и соответствующий бит n3, в противном случае он обнуляется. Так, если записать в двоичной форме 110 100 XOR в результате будет получено 010. См. также AND; OR. Y/N "y-slash-n" MMS ( -- n) Отображает запрос "(Y/N)?" и ожидает ввода с клавиатуры "Y" или "N". Если одна из букв введена, она будет отображена на экране, а в стек будет занесен флаг (0 для "Y" и I для "N"). Y/N используется для управления исполнением с пульта. [ "left-bracket" "левая скобка" I 83REQ 79REQ ( --) Устанавливает систему в режим исполнения. Текст входного потока при этом исполняется, а не компилируется. При использовании в описаниях типа двоеточие в форме: : ... [ ... ] ... ; позволяет исполнить слова между [ и ] при компиляции слова . См. также ]; STATE. ['] "bracket-tick" I,C 83REQ ( - адр) Засылает в стек и компилирует адрес поля программы слова в описании типа двоеточие. При использовании в форме : ... ['] ... ; компилирует адрес поля программы "адр" слова в качестве литерала в описание слова . Когда исполняется, "адр" засылается в стек и может быть использован, например, оператором EXECUTE, Если не может быть найдено в словаре, дается сообщение об ошибке. Выполняет функцию, эквивалентную слову ' в Форт-83, которое используется только в режиме выполнения. В Форт79 функция ' зависит от режима и выполняется так же как и [']. [COMPILE] "bracket-compile" I,C 83REQ 79REQ ( --) Заставляет компилироваться слово немедленного исполнения.При использовании в форме : ... [COMPILE] ... ; компилирует слово немедленного исполнения , которое обычно исполняется даже в режиме компиляции. В отличие от слова COMPILE, которое имеет совсем иную функцию, само [COMPILE] не компилируется. \ "backslash" I TXT MVP VAR ( --) Вынуждает Форт-интерпретатор игнорировать остальную часть 64-символьной строки. Позволяет использовать оставшуюся часть строки для комментариев. Может использоваться внутри описаний типа двоеточие. Описывается как : \ >IN @ 63 OR 1+ >IN ! ; IMMEDIATE : \ >IN @ 64 / 1+ 64 * >IN ! ; IMMEDIATE См. также (. ] "right-bracket" "правая скобка" 83REQ 79REQ ( --) Устанавливает систему в режим компиляции. Текст входного потока будет после этого компилироваться. Слово ] удобно для компиляции слов без заголовка и для компиляции CFA слов в массив для векторного исполнения. См. также [; STATE.


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