!SP

Материал из ПМК вики
Перейти к: навигация, поиск

!SP (восстановить SP, читается «присвоить эс-пи») — адаптированное слово Каллисто. Очистить стек.

!SP            ( −− )                               Восстановить SP. Присвоить указателю стека данных
                                                    исходное значение из переменной S0.

Устанавливает указатель стека в исходное состояние из переменной S0.

Ввод слова !SP[править]

В режиме NUM последовательно нажмите четыре клавиши  П     Р-ГРД-Г   1   6 

Для возврата в режим NUM нажмите синюю клавишу  P .

История[править]

В Open Firmware это слово называется clear

По рекомендации Броуди восклицательный знак ставится в начале имени, если слово инициализирует нечто своим начальным значением. Каллисто придерживается этого удобного соглашения.

Вариант с присваиванием SP значения из стека менее надёжен и может натворить больше бед в случае ошибочного применения.

SP! в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

SP!
       A computer dependent proceedure to initialize the stack pointer from
       SO.

Реализация[править]

 136 rrS0            .EQU     1131                   ; 11131  S0 − Указатель начала стека параметров
 137 rlS0            .EQU     1132
…
1740 ;#StoreSP
1741 ; !SP              ( −− )                               Восстановить SP. Присвоить указателю стека данных исходное значение из переменной S0.
1742 LSPSTO:         .DB     3
1743                 .TEXT   "!SP"
1744                 .DW     LSPAT
1745 SPSTO:          .DW     JSPSTO                  ; Установить указатель стека в исходное состояние из переменной S0.
1746 JSPSTO:         PPRM rrS0 RME ∗ PPRM rlS0 +     ; Считать переменную S0
1747                 1 EE 4 − M3  KGOTO9             ; SP := S0

Реализация из SP-Forth 4.20:

\ ================================================================
\ Указатели стеков

CODE SP! ( A -> )
     LEA EBP,  4 [EAX]
     MOV EAX, -4 [EBP]
     RET
END-CODE

Советская реализация[править]

В ФОРТ-ЕС и FORTH ИТЭФ для установки указателя стека возвратов служил примитив SP! с одинаковым названием, но разным поведением.

Вот его описание и определение из ФОРТ-ЕС:

SP!     *   А-> УСТАНОВИТЬ УКАЗАТЕЛЬ ВЕРШИНЫ СТЕКА НА A         20

                     Экран номер 20
( 31.03.86    SP@ SP! RP@ RP! 2/ 2* 2@ 2! DEPTH )

CODE SP! ( A->) RSTACK PULL, RSTACK RMASK NR,   RSTACK RFORTH AR,
 RNEXT BR, END-CODE

Вот его определение из FORTH ИТЭФ:

            HEAD     203Q,'SP',241Q,SPSTO                 ; SP!
            MOV  SP, [DI]+6
            NEXT

Ссылки[править]


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


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