Редактирование:
(NEXT)
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== Реализация == На самом деле в исходном тексте [[Каллисто|Каллисто 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>
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице