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 ]

Ссылки


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.