ALLOT
Перейти к навигации
Перейти к поиску
ALLOT (распределить, занять) — стандартное слово Каллисто.
ALLOT ( D −− ) Занять. Сместить вершину словаря на D байт.
Добавляет D байт к полю параметров слова, описанного последним. Осмысленные значения D от -4096 до 4096, обычно намного скромнее этих границ.
Оператор N ALLOT резервирует в словаре N байт.
Ввод слова ALLOT
В режиме ЛАТ последовательно нажмите клавиши ШГ← − − 5 2
ALLOT в стандарте ANS Forth
6.1.0710 ALLOT CORE ( n -- ) Если n больше нуля, резервирует n адресуемых элементов области данных. Если n меньше нуля, освобождает | n | адресуемых элементов области данных. Если n нуль, оставляет указатель области данных неизменным. Если указатель области данных выровнен, и n - кратно размеру ячейки перед выполнением ALLOT, он останется выровненным, и после завершения выполнения ALLOT. Если указатель области данных выровнен на символ, и n - кратно размеру символа перед выполнением ALLOT, он останется выровненным на символ, и после завершения выполнения ALLOT. См.: 3.3.3 Область данных.
История
D для советских ЭВМ типа ДВК или СМ должно было быть чётным.
ALLOT в предыдущем стандарте Forth-83 (англ.)
ALLOT w -- 79 Allocates w bytes in the dictionary. The address of the next available dictionary entry is updated accordingly.
ALLOT в стандарте Forth-79 (англ.)
ALLOT n -- 154 Add n bytes to the parameter field of the most recently defined word.
ALLOT в fig-FORTH Release 1 glossary, май 1979 (англ.)
ALLOT n --- L0 Add the signed number to the dictionary pointer DP. May be used to reserve dictionary space or re-origin memory. n is with regard to computer address type (byte or word).
Реализация
145 rrDP .EQU 1137 ; 11137 H − Указатель на первую свободную ячейку словаря H @ = HERE 146 pDP .EQU 137 147 rlDP .EQU 1138 … 2312 ;#ALLOT 2313 ; ALLOT ( D −− ) Занять. Сместить вершину словаря на n байт. 2314 LALLOT: .DB 5 2315 .TEXT "ALLOT" ; ( n −− ) 2316 .DW LHERE 2317 ALLOT: .DW JALLOT ; Добавить D байт к полю параметров слова, описанного последним. 2318 JALLOT: RM3 MA 1 + M3 2319 PPRM rlDP KRMA + 2320 ENT RME / FANS <−> KINT MA ∗ − PPM rlDP 2321 RMA KX!=09 2322 PPRM rrDP + PPM rrDP 2323 KGOTO9
Реализация в SP-Forth 4.20
: ALLOT ( n -- ) \ 94 \ Если n больше нуля, зарезервировать n байт пространства данных. Если n меньше \ нуля - освободить |n| байт пространства данных. Если n ноль, оставить \ указатель пространства данных неизменным. \ Если перед выполнением ALLOT указатель пространства данных выровнен и n \ кратно размеру ячейки, он остается выровненным и после ALLOT. \ Если перед выполнением ALLOT указатель пространства данных выровнен на \ границу символа и n кратно размеру символа, он остается выровненным на \ границу символа и после ALLOT. DP +! ;
Советская реализация
Определение слова ALLOT в ядре ФОРТ-ЕС:
ALLOT W-> СМЕСТИТЬ ВЕРШИНУ СЛОВАРЯ НА W БАЙТОВ 10 Экран номер 10 ( 31.03.86 HERE ALLOT ALIGN ALIGNH DP! ) CODE ALLOT ( N-> ) RD FIRST AH, POP B, END-CODE
В FORTH ИТЭФ слово ALLOT также было примитивом, вот его определение:
HEAD 205Q,'ALLO',3240,ALLOT ; ALLOT POP BX ADD [DI]+22Q,BX NEXT
Ссылки
- Исходный текст слова ALLOT в Каллисто Классик 1.0
- См. слова HERE и H, а также слово ДALLOT
- Слово ALLOT в стандарте ANS Forth (англ.)
- Слово ALLOT в черновике Forth 200x (англ.)
- ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Variables, Constants, and Arrays в книге Leo Brodie Starting Forth (англ.)
- Under the Hood в книге Leo Brodie Starting Forth (англ.)
![]() |
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
![]() |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |