|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[12] 6.3.19 Табличный ассемблер Большинство ФОРТ-ассемблеров могут отрабатывать режимы адресации и инструкции используя структуры типа CASE. Их можно назвать процедурными ассемблерами. Некоторые процессоры типа 68000 имеют настолько сложные наборы инструкций и режимов адресации, что становится сложным строить деревья выбора при ассемблеиро-вании их команд. В таких случаях более подходящим является использование таблиц, что уменьшает используемую память и процессорное время. Я не буду описывать такие процессоры - табличные ассемблеры писать намного слож- 6.3.20Префиксные ассемблеры Иногда использование префиксных ассемблеров необходимо. Например мне однажды пришлось переводить многие килобайты ассемблерного кода для Super8 для обычного ZilogoBCKoro ассемблера для ФОРТ-ассемблера. Существует трюк позволяющий имитировать префиксный ассемблер при использовании методов, описанных в этой статье. В основном этот трюк можно определить как отложенное выполнение ассемблирования после того как были обработаны операнды. Это делается следующим словом ассемблера. Так каждое слово ассемблера модифицируется так что оно 1сохраняет свой код или адрес кода, компилирующего команду; 2выполняет компилирующий команду код для предыдущего слова ассемблера. ... JP operand ADD operands JP сохраняет указатель на свой код в какой-либо переменной. Далее обрабатываются операнды. ADD берет информацию, запомненную JP и выполняет действие JP, которое использует операнды на стеке. Когда код JP завершается, ADD сохраняет свой адрес, и процесс продолжается. Особо должны отрабатываться первые и последние команды в ассемблерном блоке. Если используются переменные режима, то их сохранение и восстановление станоится кошмаром. 6.3.21Вывод Я рассмотрел наиболее простые методики используемые в ФОРТ-ассемблерах. Изучение готового ассемблера может дать вам информацию как писать собственный ассемблер, но лучший способ изучения - действие. 6.4 Постфиксный форт-ассемблер для MCS-51 Реализация собственной форт-системы Реализация ООП Детальное описание mini-OOF © Bernd Paysan пример такого ассемблера приведен в следующем разделе Объектно-ориентированные (00) системы с поздним связыванием обычно используют метод VTABLE: первая переменная24 в каждом объекте25 является указателем на описание класса в виде таблицы указателей на функции26. Эта VTABLE может также содержать некоторую другую информацию, например статические переменные. число переменных число методов xt метода Во-первых, определим методы: : method ( m v -- m+1 v ) CREATE OVER , SWAP CELL+ SWAP DOES> ( ... о --- ) <& OVER @ + @ EXECUTE При декларации метода со стека берется общее число методов и переменных класса, method создает один метод и увеличивает на 1 число методов. Для исполнения метода берется объект, из него получается указатель на VTABLE, добавляется смещение, и выполняется xt27 метода, который находится по полученному адресу. Каждый метод определяет объект, для которого он вызывается, по адресу на стеке - указателю this. Метод должен работать с объектом самостоятельно и удалять this со стека перед выходом из метода. Теперь мы должны определить переменные класса : var ( m v size -- m v+1 ) CREATE OVER , + D0ES> ( о -- addr ) @ + так ка, как и method, слово создается с текущим смещением. Переменные могут иметь различные размеры28, так что все что мы делаем - берем размер и добавляем его к смещению. Если ваша машина имеет требования по выравниванию29, перед переменной добавляем требуемые выравнивающие байты словами ALIGNED или FALIGNED, также корректирующими смещение переменной. Именно по этой причине смещение находится на вершине стека. Для начала определения объекта нам нужно задать начальное состояние30 и выполнить некоторые дополнительные действия: CREATE object 1 CELLS , 2 CELLS , vtable-ptr переменная переменная : class ( class -- class methods vers ) DUP 20 " поле 25экзмемпляре класса 26методы класса 27execution token, обычно адрес поля кода CFA слова 28целые, числа с плавающей точкой одинарной и двойной точности, символы и т.п. 29например на границу машинного слова 30пустой объект версия 26 октября 2005 г.ФОРТ Для наследования при декларации нового наследуемого31 класса должна быть скопирована VTABLE родительского объекта. Это копирование дает все методы родительского объекта, которые далее могут быть переопределены. : end-class ( class methods vars -- ) CREATE HERE >R \ (1) ( vars ) , ( methods ) , DUP , ( methods ) 2 CELLS ?D0 [] NOOP , 1 CELLS +L00P \ (2) CELL+ DUP CELL+ R> ( here ) ROT @ 2 CELLS /STRING MOVE (1)создает VTABLE, инициализированную NOOPaMH; (2)реализует механизм наследования - из родительской VTABLE копируются xt методов . У нас все еще нет способа определения новых методов, поэтому определим слово : defines ( xt class -- ) >B0DY @ + ! Для выделения памяти под новый объект нам также нужно слово : new ( class -- о ) HERE OVER <& ALLOT SWAP OVER ! Многда дочерние классы требуют доступа к методам родительского класса. Существует два способа сделать это в этом варианте реализации OOF: вы можете 1.использовать именованные слова; 2.использовать их xt из VTABLE родительского класса. : :: ( class "name" -- ) >B0DY @ + @ COMPILE, Пример Ничто не может быть лучше чем хороший пример, так что вот он. Для начала определим текстовый объект (налее называемый button), который хранит текст и позицию: object class cell var text veil var len cell var x cell var у method init method draw end-class button дочернего |
Среды: 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 | ||