Вход в систему

Лекции по курсу "Проектирование ассемблеров, компоновщиков, макропроцессоров"

Введение

 

Идеи Джона фон Неймана, высказанные им в статьях (1945, 1946 г.г.) до сих пор лежат в основе устройства современных компьютеров. Согласно им, универсальный компьютер должен содержать четыре основные блока:

  1. арифметико-логическое устройство;
  2. устройство управления;
  3. память;
  4. устройство ввода/вывода.

Память служит для хранения программ и данных. Устройство управления выбирает из памяти очередную команду и интерпретирует её - выполняет некоторые действия в зависимости от кода команды и своего состояния. Выполнение команды может повлечь за собой выборку из памяти некоторых данных или запись данных в память.

Согласно ГОСТ: программа - это данные, предназначенные для управления конкретными компонентами системы обработки информации в целях реализации определенного алгоритма.

Таким образом, программа – это данные, которые будут интерпретированы устройством управления компьютера. Эти данные должны быть сформированы так, чтобы при их выполнении был реализован определённый алгоритм. Алгоритм работы программы удобно описывать на некотором языке программирования, например, ассемблере, по крайней мере, это удобнее, чем формировать его в машинных кодах. А далее с помощью ассемблера, компоновщика, макропроцессора из текста программы будет сформирован набор данных, который при интерпретировании устройством управления даст действия, заложенные в алгоритме.

Нашей целью будет проектирование и разработка ассемблеров, компоновщиков и макропроцессоров.

Здесь ассемблер понимается как системная программа (транслятор), выполняющая перевод (транслирование) текста программы, написанного на языке ассемблер в последовательность машинных кодов. Транслятор – это более общее понятие, чем ассемблер. Транслятор выполняет перевод текста программы (исходный модуль), написанного на некотором языке программирования в соответствующую последовательность машинных кодов (объектный модуль).

Технология работы с языком ассемблер отражена на рисунке:

 

  1. Программист пишет исходный модуль или генерирует его с помощью некоторых программ, например, с помощью макропроцессора или некоторого другого транслятора, который выполняет трансляцию в текст, написанный на ассемблере.
  2. Исходный модуль обрабатывается транслятором, при этом формируется объектный модуль и листинг. В файле листинга отражаются сообщения о выполненных действиях и обнаруженных ошибках. В объектный модуль записывается последовательность машинных кодов, соответствующая тексту программы.
  3. Компоновщик формирует из полученной последовательности машинных команд модуль, способный к выполнению в конкретной операционной системе. Компоновщик может связывать несколько отдельно оттранслированных объектных модулей в один загрузочный модуль. В заголовке загрузочного модуля указывается информация о том, как надо разместить машинные коды в оперативной памяти, сколько ресурсов нужно выделить программе, с какой машинной инструкции начать выполнение и так далее.
  4. Загрузчик выделяет ресурсы, необходимые программе для старта, размещает машинные инструкции в памяти и запускает программу на выполнение.

Как уже отмечалось выше, мы будем проектировать транслятор с языка ассемблера. Ассемблер является машиноориентированным языком: одна команда ассемблера соответствует одной машинной команде. Но уровень ассемблера всё-таки выше, чем у машинного кода. Поэтому при трансляции программисту не нужно думать о некоторых технических деталях. Например, ассемблер берёт на себя разрешение переходов на еще неопределенные метки (переходы вперед), распределение памяти под данные, расчет длин переходов и т.п.

Введение
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев


исполнялось 0,124847 c, запросов к базе 6