Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''SP@''' (считать SP, читается «эс-пи извлечь») — фортовское слово [[Каллисто]]. | | '''SP@''' — стандартное слово [[Каллисто]]. |
| SP@ ( −− a ) Считать SP. Адрес текущей вершины стека данных.
| |
| Записывает в [[Стек данных|стек]] адрес вершины [[Стек данных|стека]], до исполнения команды [[SP@]]
| |
| | |
| == Ввод слова SP@ ==
| |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша 1|{{Серая клавиша|1}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
| |
| | |
| Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме 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)
| |
| | |
| == Реализация ==
| |
| <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] ''(англ.)''
| |
|
| |
|
| |
|
| {{нет иллюстраций}} | | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Фортовские слова]]
| |
| [[Категория:Примитивы]]
| |