EXECUTE
EXECUTE (выполнить, выполнение, исполнить) — стандартное слово Каллисто.
EXECUTE ( т −− ) Исполнить слово с токеном т (CFA).
Исполняет слово, токен (CFA) которого хранится в стеке.
Ввод слова EXECUTE
В режиме ЛАТ последовательно нажмите клавиши ИП 0 ИП С/П 3 2 ИП
Детали реализации
Из-за особенностей реализации поля имени слово в Каллисто обычно представляется своим NFA. Использование CFA в EXECUTE является исключением, которое не просто улучшает совместимость с Фортом, но значительно ускоряет исполнение слов.
Также обратите внимание, что передаваемый слову EXECUTE токен использует единую адресацию Каллисто. Для слов, определённых разработчиком, токен представляет собой целое число в диапазоне от 11000 до 15095. Токен встроенных слов (кроме TASK и FORTH) — целое число, меньшее 10000.
Слова, исполняемые словом EXECUTE, могут вызывать авост. Если число т на вершине стека не является адресом поля кода корректной словарной статьи, EXECUTE может привести к нестабильной работе системы.
EXECUTE в стандарте ANS Forth
6.1.1370 EXECUTE CORE ( i*x xt -- j*x ) Удаляет xt из стека, и выполняет идентифицированную им семантику. Изменения состояния стека определяются выполненным словом. См.: 6.1.0070 ', 6.1.2510 ['].
История
В некоторых версиях Форта слову EXECUTE передавался не CFA, а PFA.
В Форте FSP88 это слово называлось EXECUT (шесть букв).
EXECUTE в предыдущем стандарте Forth-83 (англ.)
EXECUTE addr -- 79 The word definition indicated by addr is executed. An error condition exists if addr is not a compilation address
EXECUTE в стандарте Forth-79 (англ.)
EXECUTE addr -- 163 Execute the dictionary entry whose compilation address is on the stack.
EXECUTE в fig-FORTH Release 1 glossary, май 1979 (англ.)
EXECUTE addr --- Execute the definition whose code field address is on the stack. The code field address is also called the compilation address.
Реализация
В Каллисто 1.0 слово EXECUTE тесно связано с адресным интерпретатором:
552 ;#EXECUTE 553 ; EXECUTE ( т −− ) Исполнить слово с токеном т (CFA). 554 LEXEC: .DB 7 555 .TEXT "EXECUTE" ; ( i∗x xt −− j∗x) 556 .DW LCLD 557 EXEC: .DW JEXEC ; Исполнить слово, CFA которого хранится в стеке. … 2479 NEXTDD: M7 M5 KRM7 RME ∗ KRM5 + ; Считать MEMW[W], это должно быть CFA очередного слова в шитом коде 2480 M8 KGOTO8 ; передать управление на адрес, записанный в CFA … 2501 DOEXECRX: M7 ; W := MEMW[RI++] считать шитый код 2502 1 EE 4 − FX<0 NEXTDD ; Слово из области двоичных данных? 2503 NEXTPP: RM7 KPRGM RME ∗ RM7 1 + KPRGM + ; Считать MEMW[W], это должно быть CFA очередного слова в шитом коде 2504 M8 KGOTO8 ; передать управление на адрес, записанный в CFA 2505 2506 JEXEC: ; Обработчик EXECUTE 2507 RM3 M8 1 + M3 KRM8 ; POP RX 2508 PGOTO DOEXECRX ; W := RX, JMP MEMW[W]
Реализации из SP-Forth 4.20:
\ ================================================================ \ Вызов подпрограммы (для подпрограммного шитого кода) CODE1 EXECUTE ( i*x xt -- j*x ) \ 94 \ Убрать xt со стека и выполнить заданную им семантику. \ Другие изменения на стеке определяются словом, которое выполняется. MOV EBX, EAX MOV EAX, [EBP] LEA EBP, 4 [EBP] JMP EBX ;C
CODE C-EXECUTE ( i*x xt -- j*x ) \ 94 \ Убрать xt со стека и выполнить заданную им семантику. \ Другие изменения на стеке определяются словом, которое выполняется. MOV EDX, EAX MOV EAX, [EBP] LEA EBP, 4 [EBP] CALL EDX RET END-CODE … : EXECUTE STATE @ IF ['] C-EXECUTE INLINE, ELSE EXECUTE THEN ; IMMEDIATE
: EXECUTE S" C-EXECUTE" TC-FINDOUT INLINE, ; IMMEDIATE
Советская реализация
Слово EXECUTE в ФОРТ-ЕС было примитивом. Вот его определение:
EXECUTE CFA-> ИСПОЛНИТЬ СЛОВО ПО CFA ЕГО СТАТЬИ 11 Экран номер 11 ( 31.03.86 ! 0! @ С! С@ , С, EXECUTE ) CODE EXECUTE ( СFA->) 14 POP, NEXT1 B, END-CODE
В FORTH ИТЭФ слово EXECUTE тоже было примитивом, вот его определение:
; BX - WP BP - указатель стека возвратов ; SI - IP-регистр SP - указатель стека параметров ; DI - указатель области USER HEAD 207Q,'EXECUT',305Q,EXEC ; EXECUTE POP BX JMP [ BX ]
Ссылки
- Исходный текст слова EXECUTE в Каллисто Классик 1.0
- См. слова DEFER, APP и '
- Слово EXECUTE в стандарте ANS Forth (англ.)
- Слово EXECUTE в черновике Forth 200x (англ.)
- ОСНОВЫ ФОРТА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Fundamental Forth в книге Leo Brodie Starting Forth (англ.)
- Under the Hood в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |