(FOR)

Материал из ПМК вики
Перейти к навигации Перейти к поиску

(FOR) — служебное слово Каллисто, лишённое заголовка. Начало цикла со счётчиком в шитом коде.

(FOR)          ( n −− )                             Начало цикла со счётчиком в шитом коде (слово без заголовка).

Служебное слово (FOR) компилируется автоматически словом FOR. Нет ни малейшей необходимости использовать имя (FOR) в приложениях, для экономии места в памяти программ слово (FOR) было лишено заголовка.

Ввод слова (FOR)[править]

В режиме NUM последовательно нажмите клавиши  ШГ→     Р-ГРД-Г   П   5   ×     P   ШГ← 

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

В первых альфа-версиях Каллисто был реализован стандартный цикл DO…LOOP. Замеры быстродействия на «Электронике МК-161» показали необходимость оптимизации языка. В результате было принято решение перейти на более шустрый цикл FOR…NEXT, заимствовав его из colorForth.

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

В Каллисто 1.0 присутствуют два варианта слова (FOR) — XFOR и XFORD — реализующие циклы в памяти программ и данных. Слово FOR компилирует XFORD, а XFOR используется самим Каллисто:

 671 POPCNTD:        RM3 1 + M3
 672 CNTD:           KRM6 RME ∗ KRM6 + M6  KGOTO9
…
 675 POPCNT:         RM3 1 + M3
 676 CNT:
 677                 Cx PPM9210                      ; Прочесть двухбайтовое значение по номеру X=0
 678                 PPM9042                         ; RI := MEMW[RI]
 679                 KGOTO9                          ; NEXT
 680 
 681 ;#xFOR
 682 ; (FOR)            ( n −− )                             Начало цикла со счётчиком в шитом коде (слово без заголовка).
 683 ; Заголовок убран, слово (FOR) используется только словом FOR
 684 ;LXFOR:         .DB     5
 685 ;               .TEXT   "(FOR)"
 686 ;               .DW     LBRAN
 687 XFORD:          .DW     JXFORD                  ; (FOR) в памяти данных
 688 JXFORD:         PKRM03 MA +/−  PX<0 POPCNTD     ; Защита от n<=0
 689                 RM3 1 + M3                      ; POP n
 690                 KRM6 KRM6 KM2 <−> KM2           ; RPUSH MEMW[RI]        ; RI := RI+2
 691                 RMA ENT RME / KINT MA RME ∗ − KM2 RMA KM2               ; RPUSH n
 692                 KGOTO9                          ; NEXT
 693 
 694 XFOR:           .DW     JXFOR                   ; (FOR) в памяти программ
 695 JXFOR:          PKRM03 MA +/− FX<0 POPCNT
 696                 RM3 1 + M3                      ; POP n
 697                 PPRM9044 PPRM9044 KM2 <−> KM2   ; RPUSH MEMW[RI]        ; RI := RI+2
 698                 RMA ENT RME / KINT MA RME ∗ − KM2 RMA KM2               ; RPUSH n
 699                 KGOTO9                          ; NEXT

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

Описание слова (DO) и определения DO…LOOP в ядре ФОРТ-ЕС:

  (DO)     *К W1,W2 ->              ВХОД В ЦИКЛ СО СЧЕТЧИКОМ ОТ N2 ДО N1  24

DO     HK ->А1,А2,3 /КОМПИЛЯЦИЯ/ НАЧАЛО ЦИКЛА "DO" CO           47
          N1,N2-> /ИСПОЛНЕНИЕ/ СЧЕТЧИКОМ ОТ N2 ДО N1

                     Экран номер 24
( 09.09.86 ЦИКЛЫ СО СЧЕТЧИКОМ: (DO/ I I' J   LEAVE)
CODE (DO) ( U1,U2->) 14 LHRW12 BAL,
1 =H  1 0 (, RI RFORTH LH, 1 RPUSH, RI RTWO AR,
      RW1 RPUSH, RW2 RPUSH, 2POP B, END-CODE

                      Экран номер 47
 ( 31.03.86   СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ )
 : DO      ?COMP  COMPILE (DO) >MARK <MARK 3 ; IMMEDIATE
 : LOOP    3 ?PAIRS COMPILE (LOOP) <RESOLVE >RESOLVE ; IMMEDIATE
 : +LOOP   3 7PAIRS COMPILE (+LOOP) <RESOLVE >RESOLVE ; IMMEDIATE

В FORTH ИТЭФ слово (DO) тоже было примитивом:

             HEAD    204Q,'(DO',251Q,XDO                  ; (DO)
             POP   AX
             SUB   BP, 2
             POP   [BP]
             SUB   BP, 2
             MOV   WORD PTR  [BP],AX
             NEXT

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


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


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