BRANCH: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 1: Строка 1:
'''BRANCH''' (переход, ветвление) — стандартное слово [[Каллисто]]. Продолжить интерпретацию от значения следующего скомпилированного адреса.
'''BRANCH''' (переход, ветвление) — встроенное слово [[Каллисто]]. Продолжить интерпретацию от значения следующего скомпилированного адреса.
  BRANCH        ( -- )                          Ветвление. Безусловный переход в шитом коде.
  BRANCH        ( -- )                          Ветвление. Безусловный переход в шитом коде.
Сразу после оператора BRANCH должен быть скомпилирован адрес ветвления. Слово BRANCH переустанавливает указатель интерпретации по адресу, скомпилированному вслед за данной [[CFA|ссылкой на поле кода]] BRANCH.
Сразу после оператора BRANCH должен быть скомпилирован адрес ветвления. Слово BRANCH переустанавливает указатель интерпретации по адресу, скомпилированному вслед за данной [[CFA|ссылкой на поле кода]] BRANCH.
Строка 8: Строка 8:
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]]


== BRANCH в предыдущем стандарте Forth-83 (англ.) ==
== История ==
Слово BRANCH слишком низкоуровневое, чтобы его включали в современные стандарты Форта. Однако оно держалось в них до 1994 года.
 
=== BRANCH в предыдущем стандарте Forth-83 (англ.) ===
       BRANCH      --                            C,83
       BRANCH      --                            C,83
           When used in the form:  COMPILE BRANCH  an unconditional
           When used in the form:  COMPILE BRANCH  an unconditional
Строка 16: Строка 19:
           BRANCH with <RESOLVE or >MARK .
           BRANCH with <RESOLVE or >MARK .


== BRANCH в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
=== BRANCH в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
  BRANCH                                      C2,L0
  BRANCH                                      C2,L0
         The run-time proceedure to unconditionally branch. An in-line offset
         The run-time proceedure to unconditionally branch. An in-line offset

Версия от 16:11, 5 июня 2016

BRANCH (переход, ветвление) — встроенное слово Каллисто. Продолжить интерпретацию от значения следующего скомпилированного адреса.

BRANCH         ( -- )                          Ветвление. Безусловный переход в шитом коде.

Сразу после оператора BRANCH должен быть скомпилирован адрес ветвления. Слово BRANCH переустанавливает указатель интерпретации по адресу, скомпилированному вслед за данной ссылкой на поле кода BRANCH.

Низкоуровневое слово BRANCH не является аналогом оператора GOTO, хотя имеет схожее назначение. Обычно BRANCH не используется при составлении программ, а только в словах вроде ELSE и REPEAT. Слово BRANCH может потребоваться при реализации собственных структур управления, например отсутствующего в Каллисто оператора CASE.

Ввод слова BRANCH

В режиме ЛАТ последовательно нажмите клавиши  В/О   ×   ШГ←   4   С/П   ПП 

История

Слово BRANCH слишком низкоуровневое, чтобы его включали в современные стандарты Форта. Однако оно держалось в них до 1994 года.

BRANCH в предыдущем стандарте Forth-83 (англ.)

     BRANCH       --                            C,83
          When used in the form:  COMPILE BRANCH  an unconditional
          branch operation is compiled.  A branch address must be
          compiled immediately following this compilation address.
          The branch address is typically generated by following
          BRANCH with <RESOLVE or >MARK .

BRANCH в fig-FORTH Release 1 glossary, май 1979 (англ.)

BRANCH                                       C2,L0
       The run-time proceedure to unconditionally branch. An in-line offset
       is added to the interpretive pointer IP to branch ahead or back.
       BRANCH is compiled by ELSE, AGAIN, REPEAT.

Реализация

У Баранова-Ноздрунова приводится следующее высокоуровневое определение слова BRANCH (стр. 54):

 : BRANCH   ( ---> )    R>  @  >R  ;

Для повышения скорости исполнения в Каллисто BRANCH реализован, как примитив.

В ФОРТ-ЕС слово BRANCH также было примитивом. Вот его описание и определение:

BRANCH  К -> ПРОДОЛЖИТЬ ИНТЕРПРЕТАЦИЮ ОТ ЗНАЧЕНИЯ               5
          СЛЕДУЮЩЕГО СКОМПИЛИРОВАННОГО АДРЕСА
BRANCH# M ПРОДОЛЖЕНИЕ ИНТЕРПРЕТАЦИИ ОТ АДРЕСА В                 5
          СЛЕДУЮНЕМ ПОЛУСЛОВЕ

                      Экран номер 5
( 09.09.86  BRANCH  ?BRANCH  (LOOP/  (+LOOP/ )

CODE  BRANCH  M: ВRANСН#
 RI 0 (, RI RFORTH LH,    RI RMASK  NR,      RNEXT BR,

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

             HEAD    206Q,'BRANC',310Q,BRAN               ; BRANCH
   CNT:      ADD   SI,  [SI]
             NEXT

Ссылки


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


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