FILL: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показаны 24 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
'''FILL''' (заполнить) — стандартное слово [[Каллисто]]. | '''FILL''' (заполнить) — стандартное слово [[Каллисто]]. | ||
FILL ( a u c −− ) Заполнить. Записать u байтов c, начиная с адреса a. | |||
Слово FILL записывает u байт c в память, начиная с адреса a. Универсальный оператор для заполнения массивов памяти идентичными символами. На основе слова FILL реализованы специализированные слова [[ERASE]] и [[BLANK]], заполняющие области памяти нулями и пробелами. | |||
== Ввод слова FILL == | |||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша П|{{Чёрная клавиша|П}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша -|{{Серая клавиша|−}}]] | |||
== FILL в стандарте ANS Forth == | == FILL в стандарте ANS Forth == | ||
Строка 12: | Строка 12: | ||
последовательных символов в памяти, начинающейся с c-addr. | последовательных символов в памяти, начинающейся с c-addr. | ||
== История == | |||
Слово FILL пришло в [[Каллисто]] из Форта, где оно является древним и стабильным. В существующем ныне виде слово FILL известно с 1979 года и входит во все стандарты. | |||
== FILL в предыдущем стандарте Forth-83 (англ.) == | === FILL в предыдущем стандарте Forth-83 (англ.) === | ||
FILL addr u 8b -- 83 | FILL addr u 8b -- 83 | ||
u bytes of memory beginning at addr are set to 8b. No | u bytes of memory beginning at addr are set to 8b. No | ||
action is taken if u is zero. | action is taken if u is zero. | ||
=== FILL в стандарте Forth-79 (англ.) === | |||
== FILL в стандарте Forth-79 (англ.) == | |||
FILL addr n byte -- 234 | FILL addr n byte -- 234 | ||
Fill memory beginning at address with a sequence of n copies | Fill memory beginning at address with a sequence of n copies | ||
Строка 25: | Строка 26: | ||
take no action. | take no action. | ||
=== FILL в fig-FORTH Release 1 glossary, май 1979 (англ.) === | |||
== FILL в fig-FORTH Release 1 glossary, май 1979 (англ.) == | |||
FILL addr quan b -- | FILL addr quan b -- | ||
Fill memory at the address with the specified quantity of bytes b. | Fill memory at the address with the specified quantity of bytes b. | ||
== Реализация == | |||
<pre> | |||
2000 ;#FILL | |||
2001 ; FILL ( a U c −− ) Заполнить. Записать U байтов c, начиная с адреса a. | |||
2002 ; Записать U байт c в память начиная с адреса a | |||
2003 ; Заполнить массив памяти идентичными литерами. | |||
2004 ; а − адрес первого байта памяти, куда будет засылаться байт c | |||
2005 ; U − число заполняемых байтов | |||
2006 ; Подразумевается, что граница памяти программ и данных не пересекается. | |||
2007 LFILL: .DB 4 | |||
2008 .TEXT "FILL" ; ( куда сколько что −− ) | |||
2009 .DW LCMOVEG | |||
2010 FILL: .DW JFILL | |||
2011 JFILL: PKRM03 MB ; Литера | |||
2012 RM3 1 + | |||
2013 JFILL2: M8 1 + MA 1 + M3 | |||
2014 KRM8 M0 +/− KX<09 ; Счётчик литер | |||
2015 KRMA 1 EE 4 − KX>=09 1 − M5 RMB | |||
2016 FILL1: KM5 FL0 FILL1 | |||
2017 KGOTO9 | |||
</pre> | |||
Реализация из SP-Forth 4.20: | |||
<pre> | |||
CODE FILL ( c-addr u char -- ) \ 94 | |||
\ Если u больше нуля, заслать char в u байтов по адресу c-addr. | |||
MOV EDX, EDI | |||
MOV ECX, [EBP] | |||
MOV EDI, 4 [EBP] | |||
CLD | |||
\ можем ли заполнять DWORD? | |||
MOV EBX, ECX | |||
AND EBX, # 3 | |||
JNZ @@1 \ низя | |||
\ сформируем DWORD | |||
MOV EBX, EAX | |||
SHL EAX, # 8 | |||
OR EAX, EBX | |||
SHL EAX, # 8 | |||
OR EAX, EBX | |||
SHL EAX, # 8 | |||
OR EAX, EBX | |||
MOV EBX, ECX | |||
SAR ECX, # 2 | |||
REP STOS DWORD | |||
MOV ECX, EBX | |||
AND ECX, # 3 | |||
@@1: | |||
REP STOS BYTE | |||
MOV EDI, EDX | |||
LEA EBP, 0C [EBP] | |||
MOV EAX, -4 [EBP] | |||
RET | |||
END-CODE | |||
</pre> | |||
=== Советская реализация === | |||
Описание и определение слова FILL в ядре ФОРТ-ЕС: | |||
<PRE> | |||
FILL A,U,C-> ЗАСЛАТЬ С В U БАЙТОВ ПО АДРЕСУ А 22 | |||
Экран номер 22 | |||
( 31.03.86 FILL ERASE BLANK COMPILE [ ] MIN MAX HEX DECIMAL) | |||
: FILL ( A,U,C->) SWAP ?DUP IF >R OVER C! | |||
DUP 1+ R> 1- CMOVE EXIT THEN 2DROP ; | |||
</PRE> | |||
В FORTH ИТЭФ слово FILL было [[примитив]]ом, который частично опирался на код [[примитив]]а [[DROP]], вот их определения: | |||
<PRE> | |||
HEAD 204Q,'DRO',320Q,DROP ; DROP | |||
DRP: ADD SP, 2 | |||
NEXT | |||
... | |||
HEAD 204Q,'FIL',314Q,FILL ; FILL | |||
POP AX ; Символ | |||
FLL: POP CX ; Счетчик символов | |||
CMP CX, 0 | |||
JLE DRP ; | |||
POP BX | |||
$REPE: MOV BYTE PTR [BX], AL | |||
INC BX | |||
LOOP $REPE | |||
NEXT | |||
</PRE> | |||
== Ссылки == | == Ссылки == | ||
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1540 | * {{Исходник|FILL|FILL}} | ||
* [http://www. | * См. также слова [[ERASE]] и [[BLANK]] | ||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1540 FILL] в стандарте ANS Forth ''(англ.)'' | |||
* Слово [http://forth-standard.org/standard/core/FILL FILL] в черновике Forth 200x ''(англ.)'' | |||
* [http://www.forth.com/starting-forth/sf8/sf8.html Variables, Constants, and Arrays] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |||
Строка 39: | Строка 127: | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Примитивы]] | |||
[[Категория:Работа с памятью Каллисто]] | [[Категория:Работа с памятью Каллисто]] | ||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 17:11, 10 ноября 2017
FILL (заполнить) — стандартное слово Каллисто.
FILL ( a u c −− ) Заполнить. Записать u байтов c, начиная с адреса a.
Слово FILL записывает u байт c в память, начиная с адреса a. Универсальный оператор для заполнения массивов памяти идентичными символами. На основе слова FILL реализованы специализированные слова ERASE и BLANK, заполняющие области памяти нулями и пробелами.
Ввод слова FILL[править]
В режиме ЛАТ последовательно нажмите четыре клавиши П 7 − −
FILL в стандарте ANS Forth[править]
6.1.1540 FILL CORE ( c-addr u char -- ) Если u больше чем нуль, сохраняет char в каждом из u последовательных символов в памяти, начинающейся с c-addr.
История[править]
Слово FILL пришло в Каллисто из Форта, где оно является древним и стабильным. В существующем ныне виде слово FILL известно с 1979 года и входит во все стандарты.
FILL в предыдущем стандарте Forth-83 (англ.)[править]
FILL addr u 8b -- 83 u bytes of memory beginning at addr are set to 8b. No action is taken if u is zero.
FILL в стандарте Forth-79 (англ.)[править]
FILL addr n byte -- 234 Fill memory beginning at address with a sequence of n copies of byte. If the quantity n is less than or equal to zero, take no action.
FILL в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
FILL addr quan b -- Fill memory at the address with the specified quantity of bytes b.
Реализация[править]
2000 ;#FILL 2001 ; FILL ( a U c −− ) Заполнить. Записать U байтов c, начиная с адреса a. 2002 ; Записать U байт c в память начиная с адреса a 2003 ; Заполнить массив памяти идентичными литерами. 2004 ; а − адрес первого байта памяти, куда будет засылаться байт c 2005 ; U − число заполняемых байтов 2006 ; Подразумевается, что граница памяти программ и данных не пересекается. 2007 LFILL: .DB 4 2008 .TEXT "FILL" ; ( куда сколько что −− ) 2009 .DW LCMOVEG 2010 FILL: .DW JFILL 2011 JFILL: PKRM03 MB ; Литера 2012 RM3 1 + 2013 JFILL2: M8 1 + MA 1 + M3 2014 KRM8 M0 +/− KX<09 ; Счётчик литер 2015 KRMA 1 EE 4 − KX>=09 1 − M5 RMB 2016 FILL1: KM5 FL0 FILL1 2017 KGOTO9
Реализация из SP-Forth 4.20:
CODE FILL ( c-addr u char -- ) \ 94 \ Если u больше нуля, заслать char в u байтов по адресу c-addr. MOV EDX, EDI MOV ECX, [EBP] MOV EDI, 4 [EBP] CLD \ можем ли заполнять DWORD? MOV EBX, ECX AND EBX, # 3 JNZ @@1 \ низя \ сформируем DWORD MOV EBX, EAX SHL EAX, # 8 OR EAX, EBX SHL EAX, # 8 OR EAX, EBX SHL EAX, # 8 OR EAX, EBX MOV EBX, ECX SAR ECX, # 2 REP STOS DWORD MOV ECX, EBX AND ECX, # 3 @@1: REP STOS BYTE MOV EDI, EDX LEA EBP, 0C [EBP] MOV EAX, -4 [EBP] RET END-CODE
Советская реализация[править]
Описание и определение слова FILL в ядре ФОРТ-ЕС:
FILL A,U,C-> ЗАСЛАТЬ С В U БАЙТОВ ПО АДРЕСУ А 22 Экран номер 22 ( 31.03.86 FILL ERASE BLANK COMPILE [ ] MIN MAX HEX DECIMAL) : FILL ( A,U,C->) SWAP ?DUP IF >R OVER C! DUP 1+ R> 1- CMOVE EXIT THEN 2DROP ;
В FORTH ИТЭФ слово FILL было примитивом, который частично опирался на код примитива DROP, вот их определения:
HEAD 204Q,'DRO',320Q,DROP ; DROP DRP: ADD SP, 2 NEXT ... HEAD 204Q,'FIL',314Q,FILL ; FILL POP AX ; Символ FLL: POP CX ; Счетчик символов CMP CX, 0 JLE DRP ; POP BX $REPE: MOV BYTE PTR [BX], AL INC BX LOOP $REPE NEXT
Ссылки[править]
- Исходный текст слова FILL в Каллисто Классик 1.0
- См. также слова ERASE и BLANK
- Слово FILL в стандарте ANS Forth (англ.)
- Слово FILL в черновике Forth 200x (англ.)
- Variables, Constants, and Arrays в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |