|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[11] IF, инвертирует код условия и компилирует условный переход на нулевой адрес, кладя адрес операнда на стек. После компиляции условного перехода HERE указывает на байт после него, поэтом нужно вычесть размер операнда условного перехода. THEN, затем модифицирует команду условного перехода, изменяя адрес перехода на реальный. Приведенный вариант THEN, - самый простой вариант для процессоров, использующих условный переход по абсолютному 16-битному адресу. У многих процессоров есть только команда условного перехода по относительному адресу ±127 байт от адреса команды перехода. В этом случае размер операнда равен одному байту, a THEN, должен предварительно вычесть из HERE адрес на стеке. 6.3.12 IF, ELSE, THEN, Улучшенный вариант IF, THEN, дополняется блоком кода, выполняемом если условие не выполняется: сс IF, ...... ELSE, ...... THEN, Ассемблерный код этой конструкции имеет вид: JP ~сс,ххх ...; код "если" JP УУУ ххх: ...; код "иначе" ELSE, должен модифицировать действия IF, и THEN, следующим образом: 1переход вперед в IF, долен быть модифицирован чтобы выполнялся переход на начало блока ELSE, ("ххх11); 2адрес, положенный на стек THEN, должен быть записан в операнд безусловного перехода в конце блока IF, ("JP ууу"). ELSE, также должен компилировать безусловный переход. : ELSE (а -- а) О Т JP,\ безусловный переход HERE 2 -\ поместить в стек адрес операнда перехода для THEN, SWAP\ получить адрес перехода IF, HERE SWAP ! \ заменить его на текущий адрес Условие перехода Т обозначает TRUE, то есть безусловный переход. При определении ELSE, может быть использован код IF, и THEN, если таже определено условие F FALSE: : ELSE (а -- a)F IF, SWAP THEN, ; SWAP адресов в стеке инвертирует последовательность модификации инструкций перехода так, что THEN, модифицирует переход внутри кода ELSE,: IF,(1) ... IF, (2) THEN,(1) ... THEN,(2) \ / внутри ELSE, версия 26 октября 2005 г.ФОРТ 6.3.13BEGIN, WHILE, REPEAT, Наиболее сложной ассемблернй структурой является цикл ПОКА, в котором условие проверяется в начале цикла, а не в конце. BEGIN, <код> сс WHILE, <код цикла> REPEAT, На практике между BEGIN, и WHILE, может быть вставлен любой код, а не только задание условия. WHILE, должен скомпилировать условный переход по инверсному условию на код за REPEAT,. Если код условия сс удовлетворяется, этот переход должен игнорироваться и выполняться код цикла. REPEAT, должен компилировать безусловный переход на BEGIN,. BEGIN,(1) ... сс IF, (2) ... AGAIN,(1) THEN,(2) Это может быть сделано с использованием существующих слов: : WHILE, (а сс -- a a) IF, SWAP ; : REPEAT, (а а -- )AGAIN, THEN, ; 6.3.14Заголовок ФОРТ-определения В большинстве приложений машинный код, созданный ФОРТ-ассемблером, помещается в словарь с помощью CODE <имя>, который создает словарную статью с именем <имя> и связывает ее со словарным списком. Слово CODE получает имя слова из входного потока, создает определение в словаре с этим именем, и настраивает указатель словаря на начало поля кода этого имени. Стандартный ФОРТ использует слово CODE не только для выделения начала ассемблерного определения в словаре, но и дополнительной инициализации ассемблера (установке переменных типа MODE). 6.3.15Кросс-компиляция До сих пор мы предполагали что в словарь компилируется машинный код системы, на которой и исполняется. Для кросс-компиляции обычно выполняется компиляция в отдельную область памяти. Эта область может иметь или не иметь словарной структуры, но она отделена от словаря хост-машины, и скомплированный код не может быть исполнен. Чаще всего для этого используется набор слов для доступа к целевому пространству памяти по аналогии с обычным долступом к памяти в ФОРТ е. Для этого могут быть использованы обычные слова с префиксом "Т": TDP указатель компиляции DP целевой системы THERE аналог HERE для целевой системы (если VALUE-переменная, TDP не нужен) ТС, Иногда вместо использования префиска "Т"эти слова определяются в отдельном словаре целевого компилятора. Словарная структура ФОРТ а позволяет иметь несколько наборов совпадающих по имени слов с различным действием. ФОРТверсия 26 октября 2005 г. 6.3.16Компиляция на диск Целевая компиляция также может выполняться сразу на диск (в файл) без использования буфера памяти целевой системы, но из-за использования прямого побайтного доступа к файлу это может значительно замедлить работу компилятора. Особенно это заметно если не используется кеширование дисковых операций. 6.3.17Безопасная компиляция Некоторые реализации ФОРТ а используют безопасную компиляцию, которая пытя-ется отловить ошибки типа несбалансированных структур управления типа IF, ... сс UNTIL, В этом примере UNTIL, некорректно использует адрес, помещенный на стек IF,. Обычный метод проверки сбалансированности структур управления - помещение на стек данных или на отдельный стек констант, уникальных для каждого управляющего слова, которые проверяются другими словами: IF, помещает 1; THEN, проверяет на 1; ELSE, проверяет на 1 и оставляет 1; BEGIN, оставляет 2; UNTIL, проверяет 2; AGAIN, проверяет 2; WHILE, проверяет 2 и оставляет 3; REPEAT, оставляет 3 DO, оставляет 4; LOOP, проверяет 4. Стоимость такой безопасности - увеличение сложности манипуляций со стеком в таких словах как ELSE, и WHILE,. ТАкже программист может захотеть последовательность в которой управляющие структуры are resolved вручную манипулируя стеком. Безопасность делает это более сложным. 6.3.18Метки Даже в эру структурного программирования некоторые программисты используют метки в ассемблерном коде. Принципиальная проблема с именоваными метками в ФОРТ-ассемблере - так как метки это ФОРТ-слова, они должны быть скомпилированы в словарь во время незавершенной компиляции другого слова в машинном коде, например: CODE TEST ... <машиннный код> HERE CONSTANT LABEL1 <машинный код> LABEL1 NZ JP, Как видно из примера определение метки LABEL1 должно создавать словарную статью внутри серидины CODE. Вот несколько решений 1 метки определяются только вне машинного кода. 2 используются некие предопределенные переменные для временного хранения меток. 3 для меток используется отдельное словарное пространство, например как это сделано по схеме TRANSIENT [?]. 4 для машинного кода используется отдельное пространство словаря. Это наиболее часто используемый метод при мета-компиляции. Большинство мета-компиляторов ФОРТ а поддерживают метки с некоторыми сложностями. версия 26 октября 2005 г.ФОРТ |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||