Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''(NEXT)''' — служебное слово [[Каллисто]], лишённое заголовка. Конец цикла со счётчиком в [[Шитый код|шитом коде]]. | | '''(NEXT)''' — стандартное слово [[Каллисто]]. |
| (NEXT) ( −− ) Конец цикла со счётчиком в шитом коде (слово без заголовка).
| |
| Служебное слово (NEXT) компилируется в [[Шитый код|шитый код]] словом [[NEXT]]. Нет ни малейшей необходимости использовать в приложениях имя (NEXT). Для экономии [[Память программ|памяти программ]] в [[Каллисто|Каллисто 1.0]] слово (NEXT) было лишено заголовка.
| |
|
| |
|
| == Реализация ==
| | Конец цикла со счётчиком в шитом коде. |
| На самом деле в исходном тексте [[Каллисто|Каллисто 1.0]] присутствуют два варианта слова (NEXT) — XNEXT и XNEXTD — реализующие циклы в памяти программ и данных. Слово [[NEXT]] компилирует XNEXTD, а XNEXT используется самим [[Каллисто]]. Оба варианта (NEXT) лишены заголовка.
| |
| <pre>
| |
| 672 CNTD: KRM6 RME ∗ KRM6 + M6 KGOTO9
| |
| …
| |
| 676 CNT:
| |
| 677 Cx PPM9210 ; Прочесть двухбайтовое значение по номеру X=0
| |
| 678 PPM9042 ; RI := MEMW[RI]
| |
| 679 KGOTO9 ; NEXT
| |
| …
| |
| 701 ;#xNEXT
| |
| 702 ; (NEXT) ( −− ) Конец цикла со счётчиком в шитом коде (слово без заголовка).
| |
| 703 ; Заголовок убран, слово (NEXT) используется только словом NEXT
| |
| 704 ;LXNEXT: .DB 6
| |
| 705 ; .TEXT "(NEXT)"
| |
| 706 ; .DW LXFOR
| |
| 707 XNEXTD: .DW JXNEXTD ; (NEXT) в памяти данных
| |
| 708 JXNEXTD: RM2 MA 1 + MB
| |
| 709 KRMB 1 − FX!=0 XNEQ0D ; Переход если мл.байт был равен 1
| |
| 710 FX<0 KMBCNTD
| |
| 711 KRMA FX!=0 XNEXITD ; Сюда перешли, если после декремента мл.байт < 0
| |
| 712 1 − FX>=0 XNEXITD
| |
| 713 KMA 255
| |
| 714 KMBCNTD: KMB PGOTO CNTD
| |
| 715 XNEQ0D: KRMA FX!=0 XNEXITD ; Переход, если счётчик == 0
| |
| 716 Cx
| |
| 717 GOTO KMBCNTD
| |
| 718 XNEXITD: KRM6 KRM6 ; Пропустить адрес перехода
| |
| 719 JUNLOOP: 4 ; Обработчик UNLOOP
| |
| 720 NLEV: RM2 + M2 ; Убрать из стека возвратов два слова, счётчик и адрес
| |
| 721 KGOTO9
| |
| 722
| |
| 723 XNEXT: .DW JXNEXT ; (NEXT) в памяти программ
| |
| 724 JXNEXT: RM2 MA 1 + MB
| |
| 725 KRMB 1 − FX!=0 XNEQ0
| |
| 726 FX<0 KMBCNT
| |
| 727 KRMA FX!=0 XNEXIT
| |
| 728 1 − FX>=0 XNEXIT
| |
| 729 KMA 255
| |
| 730 KMBCNT: KMB PGOTO CNT
| |
| 731 XNEQ0: KRMA FX!=0 XNEXIT
| |
| 732 Cx
| |
| 733 GOTO KMBCNT
| |
| 734 XNEXIT: PPRM9044 PPRM9044 ; Пропустить адрес перехода
| |
| 735 GOTO JUNLOOP
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| Для реализации цикла со счётчиком в ФОРТ-ЕС и FORTH ИТЭФ служили [[примитив]]ы (LOOP) и (+LOOP)
| |
| | |
| Вот их описания и определения из ФОРТ-ЕС:
| |
| <PRE>
| |
| (+LOOP) * N-> ТЕСТ НА ЗАВЕРШЕНИЕ ЦИКЛА "DO +LOOP" 5
| |
| С ШАГОМ N
| |
| (LOOP) * -> ТЕСТ НА ЗАВЕРШЕНИЕ ЦИКЛА "DO LOOP" 5
| |
| | |
| Экран номер 5
| |
| ( 09.09.86 BRANCH ?BRANCH (LOOP/ (+LOOP/ )
| |
| | |
| CODE BRANCH M: ВRANСН#
| |
| RI 0 (, RI RFORTH LH, RI RMASK NR, RNEXT BR,
| |
| | |
| CODE (LOOP) RW1 1 LA, 1 =F B,
| |
| CODE (+LOOP) RW1 POP,
| |
| 1 =H 0 RFIRST LH, 0 RSECOND SH, 0 RMASK NR,
| |
| 0 RW1 AR, RW1 RFIRST AH, RW1 RFIRST STH,
| |
| 0 RMASK CLR, BRANCH# BNH, RRET 6 (, 0 RRET LA,
| |
| RI RTWO AR, RNEXT BR, END-CODE
| |
| </PRE>
| |
| | |
| Определения из FORTH ИТЭФ:
| |
| <PRE>
| |
| CNT: ADD SI, [SI]
| |
| NEXT
| |
| ...
| |
| HEAD 206Q,'(LOOP',251Q,XLOOP ; (LOOP)
| |
| ; Приращение индекса цикла LOOP и может быть ветвление
| |
| INC WORD PTR [BP]
| |
| LOP: MOV AX, [BP]
| |
| CHP AX, 2[BP]
| |
| JL CNT
| |
| LV: ADD BP, 4
| |
| ADD SI, 2
| |
| NEXT
| |
| | |
| HEAD 207Q,'(+LOOP',251Q,XPLOO ; (+LOOP)
| |
| POP AX
| |
| ADD [BP], AX
| |
| CMP AX, 0
| |
| JL $LESS
| |
| JMP LOP
| |
| $LESS: MOV CX, [BP] ; Работа с отрицательными приращениями
| |
| CMP [BP]+2, CX
| |
| JLE LV
| |
| JMP CNT
| |
| </PRE>
| |
| | |
| == Ссылки ==
| |
| * {{Исходник|xNEXT|(NEXT)}}
| |
| * См. слово [[(FOR)]], а также слова [[FOR]] и [[NEXT]]
| |
|
| |
|
|
| |
|
Строка 108: |
Строка 7: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Реализация структур управления Каллисто]] | | [[Категория:Реализация структур управления Каллисто]] |
| [[Категория:Слова, лишённые заголовка]] | | [[Категория:Слова Каллисто без стековых диаграмм]] |