[an error occurred while processing this directive]


3.6 Организация ошибок 

  3.6.1 Общие слова 

    В BForth НЕ предусмотрено другой обработки ошибок, кроме 
    исполнения системным словом ERROR процедуры, адрес кото- 
    рой находиться в слове DEVPROC. Но ввиду необходимости 
    системы многозначно реагировать на ошибки системы 
    в BForth библиотеках активно используется исполнение 
    по цепочке. 

  3.6.2* Организация реакции на ОШИБКИ в BForth 

    Каждая библиотека, работающая с устройствами или со сте- 
    ком должна реагировать на ошибки системы( например: сбро-
    сить свой стек, выключить устройство и т.д. ). Ввиду то- 
    го, учесть все возможные действия при ошибке не представ-
    ляется возможным, то есть возможность организовать цепо- 
    чечное выполнение ошибок. Для этого слово, претендую- 
    щае перехватывать ошибки должно выставить на стек: 
      NEWERRPROC- адрес своей процедуры обработки ошибок 
      FORNEXTERR- адрес переменной для хранения адреса 
                  следующего слова обработки. 
    И выполнить слово MAKEMYERR, которое заставит оператор 
    ERROR выполнять первой ВАШУ процедуру. Дальнейшие дейст- 
    вия слова- обработчика ошибок зависит только от ВАС. 
    ВЫ можете не передавать управление следующему слову 
    обработчику( NEXTERR ), а обойтись без этого и оставив 
    управление в своем ЗАДАНИИ, НО при этом системой НЕ га- 
    рантируется устранение возможной причины возникновения 
    ошибки( сбой устройства, переполнение стека и т.д. ). 

  3.6.3 Системная реакция 

    В системе на ошибки реагируют следующие модули: 

      TEAC - выключает дисковод. 
      CRT  - сбрасывает экранный стек. 
      MEM  - восстанавливает основную конфигурацию памяти и 
             сбрасывает стек памяти. 
      ERROR- Печатает сообщение об ошибке и блокирует 
             вывод системы об ошибке( ошибка с кодом FF 
             игнорируется системой ). 
    После обхода всех звеньев обработки ошибок управление 
    передается системному слову обработки, которое сбрасывает
    стеки ВОЗВРАТОВ и АРИФМЕТИЧЕСКИЙ, печатает сообщение 
    ОШИБКА N xx( если код ошибки <>FF ), и выполняет вызов 
    слова QUIT. 

3.7 Организация словаря BForth 

  3.7.1 Общие слова 

    В BForth используется стандартный формат форт- слов, но 
    немного нестандартное исполнение словаря, который для 
    ускорения поиска по словарю был разбит на группы по дли- 
    не слов( хеширование по длине ). Данный принцип исполь- 
    зуется также и в MMS-FORTH. 

  3.7.2* Организация слов 

    Для тех, кто не знаком с организацией слов форта, пред- 
    лагаю прочитать[ 3 ]. В BForth  используются слова сле- 
    дующей конструкции: 
 
     1 байт: 7 6 5 4 3 2 1 0   биты 
                              
             ^ ^ ^ ^ ^ ^ ^ ^ 
             ! ! ! !--+----! 
             ! ! !    ! 
             ! ! !   Остальные биты - длина названия слова L 
             ! ! ! 
             ! ! +-Признак незавершенности компиляции 
             ! +---Признак непосредственного исполнения 
             +-----Признак начала названия 
 
     2-(L-1) байты: название слова без последней буквы 
 
     L байт: последняя буква названия с установленным стар- 
             шим битом 
 
     L+1- L+2 байты: Поле LFA ( поле связывания ) 
 
     L+3- L+5 байты: Поле CFA ( поле исполнения ) 
 
     L+6- ??? байты: Поле PFA ( поле команд ) 

    Рассмотрим подробнее поле CFA: 

      Для слов, не написанных на ассемблере в поле CFA нахо- 
      дится команда JSR xxxx( вызов процедуры обработки сло- 
      ва ). Для ассемблерных слов такая команда не нужна и 
      поэтому в данном поле начинается сам код. 

  3.7.3 Организация связей в словаре 

    Как было написано выше словарь BForth хеширован по дли- 
    не имени слова, поэтому слова в нем не просто ссылаются 
    на предыдущее слово( поле LFA ), а ссылаются на послед- 
    нее слово, имеющее такую же длину как и текущее. 

    Так например словарь может выглядит так: 

     VocabAdr 
        0 
        1+ 
        dup 
        drop 

        ...... 

     T.e. первая ячейка массива VocabAdr ссылается на слово 
          вторая ссылается на слово 1+ 
          третья на слово DUP и т.д. 





 
 

[an error occurred while processing this directive]