|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[4] проблему для таких устройств - их полную аппаратную несовместимость, что есть машинный код для одной модели телефона или КПК невозможно запустить на остальных типах устройств. Кстати, учитывая ограниченную производительность процессоров мобильных устройств и малые объемы памяти, использование языка Форт компилируемого в байт-код кажется намного эффективнее, чем использование монстров типа Java. Вот только существуют ли телефоны, для которых есть исходный код их прошивок и простой механизм перепрограммирования, чтобы на практике проверить эффективность использования Форта, зашив вместо стандартной прошивки интерпретатор байт-кода ? Поскольку интерпретация включает в себя преобразование кода программы в машинный код строчка за строчкой во время исполнения программы, то и Форт, и любой другой компилирующий язык должны работать намного быстрее. Скорость их работы складывается из нескольких компонент. Во-первых, использование стека позволяет сэкономить время на извлечение переменных из памяти, если выполняются операции с числами (стек можно разместить в быстрой кэш-памяти или разместить непосредственно в процессоре). Во-вторых, переход от примитива к примитиву и от слова к слову также занимает очень мало времени. В-третьих, в процессе исполнения программы Форт делает только минимальную проверку ошибок, поэтому не подключаются никакие "скрытые" программы для их обнаружения, например, если вы пытаетесь разделить число на 0. Проверка ошибок целиком возлагается на программиста. Поскольку форт-программа составляется и отлаживается слово за словом, это может при отладке сильно мешать, поэтому проверку ошибок можно предусматривать "по обстоятельствам". Наконец, программируя на Форте, приходится отчетливо представлять себе и учитывать, что и как делает компьютер, поэтому программа получается более эффективной. Очень малая потребность в памяти, присущая Форту, вызывается применением шитого кода и пресжде всего низкоуровневостью команд языка. В отличие от других интерпретирующих языков не требуется, чтобы код исходной программы всегда находился в памяти. И в отличие от любого компилирующего языка каждый примитив и процедуры, определенные на машинном языке, хранятся в памяти в единственном экземпляре. Большинство же компиляторов добавляют к программе блоки машинного кода примитивов при каждом обращении к ним. Когда компилятор встречает в исходном коде вызов функции, он отыскивает в библиотеке определенные на машинном коде процедуры и размещает их в памяти, поэтому, если функция вызывается несколько раз, то в память будет помещено несколько копий машинного кода процедуры. Интерпретирующий язык с шитым кодом записывает процедуру в память только один раз и делает переход к ней из любого места, где она потребуется. Поэтому форт-программа может занимать в памяти значительно меньше места, чем эквивалентная программа, написанная, скажем, на Фортране. При этом время вызова и возврата из процедуры чаще всего мало, и потеря скорости по сравнению с inline-компиляцией этих процедур незначительна. Наконец, Форт обладает потрясающей способностью управлять компьютером, поскольку на нем довольно легко определить новые примитивы, т.е. процедуры в машинных кодах, при условии что не используется виртуальная машина и байт-код. Если определение слова начинается с CODE, то все, что следует после этого слова, описывается на языке ассемблера и при ассемблировании превращается в машинный код, который становится частью определения этого слова. Описание вы найдете в гл. 16. Поскольку слова Форта можно легко комбинировать с мнемоникой ассемблера, он обладает мощью ассемблера и удобством языка высокого уровня. Очевидно, что программирование на форт-ассемблере не является обязательным, но приятно сознавать, что такая возможность имеется при необходимости. 2.3 Характеристики языков 2.3.1 Запоминаемость Первые программы для ЭВМ выглядели как-то вроде: 00110101 11010011 11011001 Программисты вводили их, устанавливая ряды переключателей в положение "вкл."для единиц и "выкл." для нулей. Эти значения были "машинными инструкциями" для ЭВМ, и каждая заставляла ее производить некие элементарные операции типа "переместить содержимое регистра А в регистр Б" или "добавить содержимое регистра В к содержимому регистра А". Это оказалось несколько скучноватым. Скука - мачеха изобретения, поэтому некоторые умные программисты осознали, что машину и саму можно затставить помочь им. Так они написали программу, которая переводила легкозапоминаемые аббревиатуры в труднозапоминаемые последовательности битов. Новый язык выглядел примерно так: M0V В,А ADD С,А JNC REC1 Переводчик (транслятор) программ был назван ассемблером, а новый язык - языком ассемблера. Каждая инструкция "собирала" ("ассемблировала") соответствующую последовательность битов для себя при сохранении точного соотношения между ассемблерной инструкцией и машинной командой. Но ведь имена программистам запоминать легче. По этой причине новые инструкции были названы мнемониками. 2.3.2 Мощность языка Программирование на языке ассемблера характеризуется соответствием "один-в-один" между каждой командой, которую набивает программист, и командой, которую исполняет процессор. На практике программисты обнаружили, что они часто повторяют одинаковую последовательность инструкций вновь и вновь для того, чтобы делать одно и то же в различных частях программы. Было бы приятно завести имена, представляющие собой каждую из таких обычных последовательностей. Это пожелание было удовлетворено "макроассемблером", более сложным ассемблером, который мог распознавать не только нормальные инструкции, но также специальные имена ("макро"). Для каждого из них макроассемблер транслирует пять или десять машинных команд, представленных этим именем, так, как будто программист написал их все полностью. 2.3.3 Абстрактность Важным достижением было изобретение "языка высокого уровня". Это опять была программа-переводчик, но более мощная. Высокоуровневые языки делают возможным для программистов записывать выражения вида: X = Y ( 456 / А ) - 2 версия 26 октября 2005 г.ФОРТ которые сильно похожи на алгебраические. Благодаря языкам высокого уровня инженеры, а не только странноватые бит-жокеи, смогли начать писать программы. BASIC и FORTRAN - примеры высокоуровневых языков. Очевидно, что языки высокого уровня мощнее, чем ассемблеры, поскольку каждая инструкция может компилироваться в десятки машинных команд. Но что более важно, эти языки уничтожают линейное соответствие между исходным текстом и результирующим машинным кодом. Реальные инструкции зависят от каждого "выражения" в исходном тексте, взятом как единое целое. Операторы вроде + и = сами по себе не имеют смысла. Они - просто часть сложной символики, которая зависит от синтаксиса и позиции оператора в тексте. Это нелинейное, зависящее от синтаксиса соответствие между исходным текстом и реальным (обектным) кодом обычно рассматривается как неоценимый вклад в прогресс методологии программирования. Но, как мы увидим впоследствии, такой подход неизбежно предоставляет больше ограничений, чем свободы. 2.3.4 Управляемость Большинство компьютеров используют нечто большее, чем просто список инструкций для своей работы. Они также производят проверку различных условий и затем "скачки" в соответствующие части программы в зависимости от результата. Они также производят многократное "зацикливание" на одних и тех же участках кода, обычно контролируя при этом момент выхода из цикла. Как ассемблер, так и высокоуровневый язык обеспечивают возможности для переходов и циклов. В ассемблерах мы используем команды типа "щтр"("прыжок"), в некоторых языках высокого уровня пользуемся конструкциями типа "GO ТО" ("перейти к"). Когда эти возможности используются в сильной степени, программы начинают становиться похожими на такую же неразбериху, как на рисунке 1-1. Рис.1-1. Неструктурированный код, использующий инструкции типа "jump"\ или "GOTO". ИНСТРУКЦИЯ ИНСТРУКЦИЯ ИНСТРУКЦИЯ ИНСТРУКЦИЯ ПРОВЕРКА УСЛОВИЯ ПЕРЕХОД ИНСТРУКЦИЯ ИНСТРУКЦИЯ ИНСТРУКЦИЯ ИНСТРУКЦИЯ ИНСТРУКЦИЯ ПЕРЕХОД ИНСТРУКЦИЯ ИНСТРУКЦИЯ ИНСТРУКЦИЯ ИНСТРУКЦИЯ ПРОВЕРКА УСЛОВИЯ ПЕРЕХОД ПРОВЕРКА УСЛОВИЯ ПЕРЕХОД |
Среды: 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 | ||