Лекции по курсу "Проектирование ассемблеров, компоновщиков, макропроцессоров"
1. Причины использования языка ассемблер
Программирование на ассемблере сейчас не так распространено как раньше. Однако есть причины для изучения этого языка. Вот основные из них:
- Образовательная причина. Очень важно знать, как микропроцессоры и компиляторы работают на уровне машинных инструкций.
- Отладка и проверка. Для просмотра ассемблерного кода, сгенерированного компилятором, или просмотра листинга, выданного дизассемблером, с целью поиска ошибок и проверки качества оптимизации критических участков программы.
- Создание компиляторов. Понимание технологии ассемблирования непосредственно для создания компиляторов, отладчиков и других средств разработки.
- Разработка компиляторов для языков высокого уровня. При появлении новой архитектуры или операционной системы нужно также разработать компиляторы для множества различных языков программирования. Сначала пишут и отлаживают ассемблеры для этой системы. А потом пишут трансляторы с другим языком программирования в язык ассемблера. Так разрабатываются Gnu-компиляторы (версии Unix сменяются часто и существуют они для различных архитектур).
- Драйверы и системный код. Обращение к аппаратному обеспечению, регистрам и т.д. достаточно сложно организовать на языке высокого уровня.
- Вызов инструкций, которые недоступны в языках высокого уровня. Некоторые инструкции ассемблера не имеют эквивалентов в языках высокого уровня.
- Самомодифицирующийся код. Использование самомодифицирующегося кода в общем случае является неэффективным. Но его можно использовать, например, когда нужно включить небольшой компилятор в математическую программу для выполнения функций, определяемых пользователем. Также самомодифицирующийся код применяется для усложнения дизассемблирования и отладки программ.
- Оптимизация кода по размеру. В настоящее время требования к размеру программы, налагаемые вследствие ограниченности размера памяти, не существенны. Однако, для работы с некоторыми ограниченными ресурсами (например, кэш-память сетевой платы) лучше использовать небольшой код.
- Оптимизация кода по скорости. Современные C++ компиляторы оптимизируют код очень хорошо в большинстве случаев. Но бывает, что и эти компиляторы не могут сделать программу такой быстрой, какой её можно сделать на ассемблере, правильно расположив команды.
- Функциональные библиотеки. Польза от оптимизации кода максимальна, когда она применяется к библиотечным функциям, используемым многими программистами.
- Создание функциональных библиотек, совместимых с множеством компиляторов и операционных систем. Это возможно при создании библиотек с множеством входов для различных компиляторов и операционных систем. Это используется в ассемблерном программировании.
Введение
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев