Текущая версия |
Ваш текст |
Строка 6: |
Строка 6: |
| == Ввод слова WORD == | | == Ввод слова WORD == |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша В↑|{{Серая клавиша|В↑}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша K|{{Синяя клавиша|K}}]] | | В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша В↑|{{Серая клавиша|В↑}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша K|{{Синяя клавиша|K}}]] |
| | |
| | == Детали реализации == |
| | Слово WORD кладёт адрес считанного слова в [[Стек данных|стек]], как это требует Форт−79. Этот адрес a всегда равен [[HERE]] — как и в большинстве реализаций Форта. Первый байт по адресу a содержит число символов в считанном слове. Фактически это уже заготовка для [[Поле имени|поля имени]] новой [[Словарная статья|словарной статьи]], ждущая своего [[ALLOT]]. |
| | |
| | Длина имени слова ограничивается 31 литерой. |
|
| |
|
| == WORD в стандарте ANS Forth == | | == WORD в стандарте ANS Forth == |
Строка 89: |
Строка 94: |
|
| |
|
| == Реализация == | | == Реализация == |
| Слово WORD кладёт адрес считанного слова в [[Стек данных|стек]], как это требует Форт. Этот адрес a всегда равен [[HERE]] — как и в большинстве реализаций Форта. Первый байт по адресу a содержит число символов в считанном слове. Фактически это уже заготовка для [[Поле имени|поля имени]] новой [[Словарная статья|словарной статьи]], ждущая своего [[ALLOT]].
| |
|
| |
| Длина имени слова ограничивается 31 литерой.
| |
| <pre>
| |
| 3167 ;#WORD
| |
| 3168 ; WORD ( c −− a ) Ввести слово до стоп−литеры c. Дать его адрес, как строки со счётчиком.
| |
| 3169 ; Считать одно слово из входного или экранного буфера и разместить его, начиная с адреса HERE
| |
| 3170 ; Первый байт содержит число литер в слове.
| |
| 3171 ; Положить адрес считанного слова на стек, как это требует Форт−79.
| |
| 3172 ; Этот адрес a всегда HERE −− как и в большинстве реализаций Форта.
| |
| 3173 LWORD: .DB 4
| |
| 3174 .TEXT "WORD" ; ( c "<c>ccc<c>" −− HERE )
| |
| 3175 .DW LPAD
| |
| 3176 WORD: .DW CALL, BLK,UAT, QDUP,ZBRAN,WD1, BLOCK, BRAN,WD2
| |
| 3177 WD1: .DW TIB
| |
| 3178 WD2: .DW IN,UAT, PLUS, SWAP, ENCL
| |
| 3179 .DW HERE, BL,BLANK ; BL == 32 ( 31 имя и 1 байт длины)
| |
| 3180 .DW IN,PSTOR, DUP,TOR, HERE,CSTOR
| |
| 3181 .DW HERE,ONEP, FROMR, CMOVE, HERE, EXIT
| |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| : WORD ( char "<chars>ccc<char>" -- c-addr ) \ 94
| |
| \ Пропустить ведущие разделители. Выбрать символы, ограниченные
| |
| \ разделителем char.
| |
| \ Исключительная ситуация возникает, если длина извлеченной строки
| |
| \ больше максимальной длины строки со счетчиком.
| |
| \ c-addr - адрес переменной области, содержащей извлеченное слово
| |
| \ в виде строки со счетчиком.
| |
| \ Если разбираемая область пуста или содержит только разделители,
| |
| \ результирующая строка имеет нулевую длину.
| |
| \ В конец строки помещается пробел, не включаемый в длину строки.
| |
| \ Программа может изменять символы в строке.
| |
| DUP SKIP PARSE 255 MIN
| |
| DUP SYSTEM-PAD C! SYSTEM-PAD CHAR+ SWAP CMOVE
| |
| 0 SYSTEM-PAD COUNT CHARS + C!
| |
| SYSTEM-PAD
| |
| ;
| |
| </pre>
| |
|
| |
| === Советская реализация ===
| |
| Описание и определение слова WORD в ядре ФОРТ-ЕС: | | Описание и определение слова WORD в ядре ФОРТ-ЕС: |
| <PRE> | | <PRE> |
Строка 169: |
Строка 133: |
| [[Категория:Стандартные слова]] | | [[Категория:Стандартные слова]] |
| [[Категория:1994 CORE]] | | [[Категория:1994 CORE]] |
| [[Категория:2012 CORE]]
| |