SP@: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''SP@''' (считать 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 | ||
Строка 26: | Строка 31: | ||
== Реализация == | == Реализация == | ||
Слово SP@ в ФОРТ-ЕС было [[примитив]]ом. Вот | <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> | <PRE> | ||
SP@ + ->А АДРЕС ТЕКУЩЕЙ ВЕРШИНЫ СТЕКА ДАННЫХ 20 | SP@ + ->А АДРЕС ТЕКУЩЕЙ ВЕРШИНЫ СТЕКА ДАННЫХ 20 | ||
Строка 34: | Строка 62: | ||
CODE SP@ ( ->A) RW1 RSTACK LR, RW1 RFORTH SR, PUSHRW1 B, | 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> | </PRE> | ||
== Ссылки == | == Ссылки == | ||
* {{Исходник|SPFetch|SP@}} | |||
* См. слова [[!SP]] и [[S0]] | * См. слова [[!SP]] и [[S0]] | ||
* [https://en.wikipedia.org/wiki/Stack_register Stack register в английской Википедии] ''(англ.)'' | * [https://en.wikipedia.org/wiki/Stack_register Stack register в английской Википедии] ''(англ.)'' | ||
Строка 46: | Строка 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
Ссылки[править]
- Исходный текст слова SP@ в Каллисто Классик 1.0
- См. слова !SP и S0
- Stack register в английской Википедии (англ.)
- ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Under the Hood в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |