SP@: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 16 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''SP@''' (эс-пи извлечь) — стандартное слово [[Каллисто]].
'''SP@''' (считать SP, читается «эс-пи извлечь») — фортовское слово [[Каллисто]].
 
SP@            ( −− a )                            Считать SP. Адрес текущей вершины стека данных.
Записывает в [[Стек данных|стек]] адрес вершины [[Стек данных|стека]], до исполнения команды [[SP@]]
Записывает в [[Стек данных|стек]] адрес вершины [[Стек данных|стека]], до исполнения команды [[SP@]]


Строка 8: Строка 8:
Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме NUM]].
Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме NUM]].


== SP@ в предыдущем стандарте Forth-83 (англ.) ==
== История ==
Это слово иногда называлось 'S (две литеры), но во всех стандартах, начиная с fig-Форта, получило устойчивое имя SP@ — под которым и вошло в [[Каллисто]].
 
Слово SP@ отсутствует в действующем стандарте ANS Forth и его нет в черновиках Форта-2012.
 
=== SP@ в предыдущем стандарте Forth-83 (англ.) ===
       SP@          -- addr                      79        "s-p-fetch"
       SP@          -- addr                      79        "s-p-fetch"
           addr is the address of the top of the stack just before SP@
           addr is the address of the top of the stack just before SP@
           was executed.
           was executed.


 
=== SP@ в стандарте Forth-79 (англ.) ===
== SP@ в стандарте Forth-79 (англ.) ==
  SP@            -- addr                      214        "s-p-fetch"
  SP@            -- addr                      214        "s-p-fetch"
     Return  the address of the top of the stack,  just before  SP@
     Return  the address of the top of the stack,  just before  SP@
     was executed.
     was executed.


 
=== SP@ в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== SP@ в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  SP@            --- addr
  SP@            --- addr
         A computer dependent proceedure to return the address of the stack
         A computer dependent proceedure to return the address of the stack
Строка 27: Строка 30:
             type 2  2  1)
             type 2  2  1)


== Реализация ==
<pre>
1729 ; ∗∗∗ Стек ∗∗∗
1730 ;
1731 ;#SPFetch
1732 ; SP@              ( −− a )                            Считать SP. Адрес текущей вершины стека данных.
1733 LSPAT:          .DB    3
1734                .TEXT  "SP@"
1735                .DW    LTG
1736 SPAT:          .DW    JSPAT                  ; Положить на стек адрес вершины стека, до исполнения команды SP@
1737 JSPAT:          RM3
1738 SPAT0:          1 EE 4 + KM3  KGOTO9
</pre>
Реализация из SP-Forth 4.20:
<pre>
CODE SP@ ( -> A )
    LEA EBP, -4 [EBP]
    MOV [EBP], EAX
    MOV EAX, EBP
    RET
END-CODE
</pre>
=== Советская реализация ===
Слово SP@ пришло в [[Каллисто]] из ФОРТ-ЕС и FORTH ИТЭФ, где также было [[примитив]]ом. Вот описание и определение SP@ из ФОРТ-ЕС:
<PRE>
SP@    +  ->А АДРЕС ТЕКУЩЕЙ ВЕРШИНЫ СТЕКА ДАННЫХ              20
                    Экран номер 20
( 31.03.86    SP@ SP! RP@ RP! 2/ 2* 2@ 2! DEPTH )
CODE SP@ ( ->A) RW1 RSTACK LR, RW1 RFORTH SR, PUSHRW1 B,
</PRE>
Определение SP@ из FORTH ИТЭФ:
<PRE>
  ENDA:    PUSH AX
            NEXT
            ...
            HEAD    203Q,'SP',300Q,SPAT                  ; SP@
            MOV  AX, SP
            JMP  ENDA
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|SPFetch|SP@}}
* См. слова [[!SP]] и [[S0]]
* [https://en.wikipedia.org/wiki/Stack_register Stack register в английской Википедии] ''(англ.)''
* [https://en.wikipedia.org/wiki/Stack_register Stack register в английской Википедии] ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\09.FUNKZIONIROWANIE%20FORT-SISTEMY ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf9/sf9.html Under the Hood] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




Строка 35: Строка 85:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Фортовские слова]]
[[Категория:Примитивы]]

Текущая версия от 17:12, 10 ноября 2017

SP@ (считать SP, читается «эс-пи извлечь») — фортовское слово Каллисто.

SP@            ( −− a )                             Считать SP. Адрес текущей вершины стека данных.

Записывает в стек адрес вершины стека, до исполнения команды SP@

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

В режиме ЛАТ последовательно нажмите четыре клавиши  1   6     P   ИП 

Эти нажатия оставляют клавиатуру в режиме NUM.

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

Это слово иногда называлось 'S (две литеры), но во всех стандартах, начиная с fig-Форта, получило устойчивое имя SP@ — под которым и вошло в Каллисто.

Слово SP@ отсутствует в действующем стандарте ANS Forth и его нет в черновиках Форта-2012.

SP@ в предыдущем стандарте Forth-83 (англ.)[править]

     SP@          -- addr                       79         "s-p-fetch"
          addr is the address of the top of the stack just before SP@
          was executed.

SP@ в стандарте Forth-79 (англ.)[править]

SP@            -- addr                       214        "s-p-fetch"
    Return  the address of the top of the stack,  just before  SP@
    was executed.

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

SP@            --- addr
       A computer dependent proceedure to return the address of the stack
       position to the top of the stack, as it was before SP@ was executed.
           (e.g.  1  2  SP@  @  .   .   .     would
           type 2  2   1)

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

1729 ; ∗∗∗ Стек ∗∗∗
1730 ;
1731 ;#SPFetch
1732 ; SP@              ( −− a )                             Считать SP. Адрес текущей вершины стека данных.
1733 LSPAT:          .DB     3
1734                 .TEXT   "SP@"
1735                 .DW     LTG
1736 SPAT:           .DW     JSPAT                   ; Положить на стек адрес вершины стека, до исполнения команды SP@
1737 JSPAT:          RM3
1738 SPAT0:          1 EE 4 + KM3  KGOTO9

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

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

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

Слово SP@ пришло в Каллисто из ФОРТ-ЕС и FORTH ИТЭФ, где также было примитивом. Вот описание и определение SP@ из ФОРТ-ЕС:

SP@     +   ->А АДРЕС ТЕКУЩЕЙ ВЕРШИНЫ СТЕКА ДАННЫХ              20

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

CODE SP@ ( ->A) RW1 RSTACK LR, RW1 RFORTH SR, PUSHRW1 B,

Определение SP@ из FORTH ИТЭФ:

   ENDA:    PUSH AX
            NEXT
            ...
            HEAD     203Q,'SP',300Q,SPAT                  ; SP@
            MOV  AX, SP
            JMP  ENDA

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


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


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