(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
Ссылки[править]
- Исходный текст слова (FOR) в Каллисто Классик 1.0
- См. слово (NEXT), а также слова FOR и NEXT
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |