[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]