!RP

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

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

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

Присваивает указателю стека возвратов исходное (базовое) значение из переменной R0.

Маленькие хитрости[править]

Будьте внимательны — при переустановке указателя стека возвратов адресному интерпретатору будет некуда возвращаться! Поэтому после !RP рекомендуется использовать слово QUIT для передачи управления на пульт — которое, кстати, само содержит вызов !RP.

Для установки RP на произвольное значение перед !RP запишите требуемое значение в переменную R0.

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

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

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

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

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

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

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

RP!
       A computer dependent proceedure to initialize the return stack
       pointer from user variable R0.

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

 139 rrR0            .EQU     1133                   ; 11133  R0 − Указатель начала стека возвратов
 140 rlR0            .EQU     1134
…
1759 ;#StoreRP
1760 ; !RP              ( −− )                               Восстановить RP. Присвоить указателю стека возвратов исходное значение из переменной R0.
1761 LRPSTO:         .DB     3
1762                 .TEXT   "!RP"
1763                 .DW     LRPAT
1764 RPSTO:          .DW     JRPSTO                  ; Присвоить указателю стека возвратов исходное (базовое) значение из переменной R0.
1765 JRPSTO:         PPRM rrR0 RME ∗ PPRM rlR0 +     ; Считать переменную R0
1766                 1 EE 4 − M2  KGOTO9             ; RP := R0

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

CODE RP! ( A -> )
     POP EBX
     MOV ESP, EAX
     MOV EAX, [EBP]
     LEA EBP, 4 [EBP]
     JMP EBX
END-CODE

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

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

Вот описание и определение RP! в ядре ФОРТ-ЕС:

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

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

CODE RP! ( A->) RRET POP, RRET RMASK NR,
  RRET RFORTH AR,   RNEXT BR, END-CODE

Вот определение RP! в FORTH ИТЭФ:

            HEAD     203Q,'RP',241Q,RPSTO                 ; RP!
            MOV  BP, $RS
            NEXT

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


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


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