(NEXT): различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
'''(NEXT)''' — стандартное слово [[Каллисто]], лишённое заголовка. Конец цикла со счётчиком в шитом коде.
'''(NEXT)''' — стандартное слово [[Каллисто]], лишённое заголовка. Конец цикла со счётчиком в [[Шитый код|шитом коде]].
  (NEXT)        ( −− )                              Конец цикла со счётчиком в шитом коде (слово без заголовка).
  (NEXT)        ( −− )                              Конец цикла со счётчиком в шитом коде (слово без заголовка).
Это служебное слово. Его компилирует в шитый код слово [[NEXT]]. Нет ни малейшей необходимости использовать слово (NEXT) в прикладных программах. Для экономии памяти программ в [[Каллисто]] слово (NEXT) было лишено заголовка.
Это служебное слово. Его компилирует в шитый код слово [[NEXT]]. Нет ни малейшей необходимости использовать слово (NEXT) в прикладных программах. Для экономии памяти программ в [[Каллисто]] слово (NEXT) было лишено заголовка.

Версия от 03:06, 20 июня 2016

(NEXT) — стандартное слово Каллисто, лишённое заголовка. Конец цикла со счётчиком в шитом коде.

(NEXT)         ( −− )                               Конец цикла со счётчиком в шитом коде (слово без заголовка).

Это служебное слово. Его компилирует в шитый код слово NEXT. Нет ни малейшей необходимости использовать слово (NEXT) в прикладных программах. Для экономии памяти программ в Каллисто слово (NEXT) было лишено заголовка.

Детали реализации

На самом деле в исходном тексте Каллисто 1.0 присутствуют два варианта слова (NEXT) — XNEXT и XNEXTD — реализующие циклы в памяти программ и данных. Слово NEXT компилирует XNEXTD, а XNEXT используется самим Каллисто.

Реализация

Для реализации цикла со счётчиком в ФОРТ-ЕС и FORTH ИТЭФ служили примитивы (LOOP) и (+LOOP)

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

  (+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

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

   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

Ссылки


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


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