Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО лекции.docx
Скачиваний:
21
Добавлен:
01.08.2019
Размер:
92.68 Кб
Скачать

Сотников сергей викторович

Системное программное обеспечение

Лек № 1 - 2.

Тема: Структура программ Ассемблера.

  1. Организация оперативной памяти.

  2. Основные типы данных.

  3. Основные форматы команд.

  4. Основные регистры процессора.

  5. Способы адресации.

  6. Системы команд.

  1. Байт – минимальная единица измерения. Линейная модель оперативной памяти (0……n).

Машинное слово – 3 байта.

  1. Два типа данных: целые числа (1-но слово), однобайтные символьные данные (последовательность байт) (для строки несет код символа).

  2. Он определяет структуру команды и объем памяти для команды.

  1. Однобайтные команды

  1. Двухбайтные команды

Пр: ADD регистр1,регистр2

  1. Трехбайтные команды

Пр: jmp 4096(10)

  1. Четырехбайтные команды

Пр: CALL M1

LOADR1 адрес

SAVER1 адрес

  1. Будем считать что абстрактный процесс имеет два регистра:

  • Общего назначения (AX,BX,CX,DX..)

  • Специализированные регистры (IP,регистры флагов, регистровые и т.д)

  1. Способы адресации:

  • Непосредственная адресация (в ней адреса в самой команде).

  • Прямая адресация (в команде в операндной части находится абсолютный адрес операнда в оперативной памяти).

  • Относительная адресация (в команде находится смещение относительно базового значения), используем:

  1. Относительно счетчика команд.

  2. Относительно базового регистра.

  1. Системы команд:

  1. Команды загрузки регистров содержимым областей памяти (из оперативной памяти -> регистр).

  2. Команды загрузки содержимого регистра в оперативную память (из регистра -> в оперативную память).

  3. Арифметические команды.

  4. Логические операции.

  5. Операции сравнения.

  6. Команды переходов, бывают:

  • Условные.

  • Безусловные.

Язык ассемблера абстрактного процессора.

Каждая строка может содержать либо одну ассемблерную инструкцию (команду ассемблера) либо псевдокоманду.

Псевдокоманда – не имеет двоичное представление (машинный код), они нужны что указать как ассемблировать. Пр: М1,START,MACRO и т.д.

[метка] мнемонический код операции (МКОП) [адресная часть]

[метка] – поименованная область памяти.

Псевдокоманды.

Директивы:

  1. START

Формат : «имя программы» START [адрес загрузки (необязательно)]

  1. END

Формат : END [адрес точки входа (необязательно)]

  1. WORD – определение целочисленной команды длиной в 1но слово.

Формат : «имя» WORD 4096(10)

  1. BYTE – определение символьной инф-ции либо 16тиричной.

Формат : «имя» BYTE [hello]

«имя» BYTE ‘00FF’(16)

  1. RESW – количество слов

Формат : «имя» RESW кол-во слов.

  1. RESB – количество байт

Формат : «имя» RESB кол-во байт.

Назначение и функции программ ассемблера.

Дополнительная информация – инф-я для загрузчика, какие внешние имена, функции используются.

Что должен выполнять ассемблер:

  1. Назначить все командам, константам и областям памяти соответствующие адреса.

  2. Заменить мнемонический код операции двоичным представлением.

  3. Заменить символические имена соответствующими адресами.

  4. Сгенерировать машинные команды в соответствующем формате.

  5. Перевод констант из внешнего представления во внутреннюю.

  6. Зарезервировать все необходимые области памяти.

  7. Создать объектный код соответствующего формата в двоично-символьное представление (т.е сформировать модуль).

  8. Сформировать листинг об ошибках.

Основные принципы реализации программ ассемблера.

26.02.

Лекция №3

Способы реализации ассемблирующих программ:

  1. 2хпросмотровая схема работа ассемблера. Ассемблирующая программа выполняет 2 прохода. Т е собираем все ссылки в виде некой специальной таблицы, а на 2м проходе производим обработку частей. Достоинства: каждый алгоритм очень простой. Недостаток: относительно более низкое быстродействие

  2. 1просмотровая схема ассемблирования. Достоинство- быстродействие.

Структура простого 2хпроходного ассемблера

Простой ассемблер – ассемблер, удовлетворяющий следующим условиям:

  1. настройка всех адресов в объектном коде осуществляется относительно жестко заданного адреса загрузки(программа в абсолютном формате).

  2. будем использовать только прямую адресацию.

  3. исходный текст программы представляет собой единый модуль.

Реализация программы:

  1. счетчик адреса(перемещения) – назначение командам и операндам соответствующих адресов. Конечное значение счетчика адреса используется для вычисления длины программы.

  2. Специальные таблицы:

- таблица кодов операций

Рис1

- таблица символических имен

Рис2

Эта таблица строится динамически

Prog1 START 100

JMP L1

A1 RESB 10(10)

A2 RESW 20(10)

B1 WORD 4096(10)

B2 BYTE x2F4C008A

B3 BYTE c’Hello!’

B4 BYTE 128(10)

L1 LOADR1 B1

LOADR2 B4

ADD R1,R2

SAVER1 B1

END 100

Рис 3

Алгоритм 1го прохода 2хпросмотровой схемы ассемблера

Цель:

- назначить адреса командам и константам используя счетчик адреса

- построить ТСИ, которая будет использоваться во 2х проходе

Алгоритм:

  1. счетчику адреса присваиваем адрес загрузки

  2. организуем цикл по обработке строк исходного текста программы, каждая строка которого обрабатывается следующим образом:

    1. разбиваем входную строку на 3 составляющие: метка, мнимо код и операндная часть

    2. если в поле метки обнаружено символическое имя, то организуем поиск символического имени в ТСИ, если имя обнаружено, то генерируется ошибка. Если Си в ТСИ не обнаружено, то заносим его в ТСИ и с ним сопоставляем адрес из счетчика адреса

    3. Анализируем поле МКОП операции:

      1. Если в поле МКОП операции встретилась директива резервирования памяти, то значение счетчика адреса увеличивается на величину резервирования в памяти

      2. осуществляем поиск в ТКО.

      3. Если поиск неудачен, то генерируется ошибка неправильного кода операций

      4. Если поиск удачен, то заменяем МКОП двоичным представлением из ТКО и увеличиваем счетчик адреса на длину команды

  3. окончание цикла при достижении директивы END. При этом происходит вычисление длины программы.

Рис4

5.03.09

Лекция №4

Структура выходного объектного модуля

  1. Запись – НАЧАЛО(заголовок)

Н имя программы адрес загрузки длина (рис1)

2. запись – конец

Е адрес точки входа(знакоместа аналогично)

3. Запись - тело модуля

Т адрес загрузки записи (АЗЗ) длина записи тело записи(команда константы в двоичном виде)

Алгоритм 2го прохода 2хпросмотровой схемы ассемблера

Цель: генерация машинных команд и констант в двоичном представлении и создание объектного модуля.

Исходные данные: таблица ТСИ и вспомогательная таблица

  1. Считываем 1ю строчку исходного текста программы и формируем запись-заголовок.

  2. организуем цикл по обработке строк исходного текста.

    1. анализируем поле операнда: если в нем обнаружено символическое имя, то осуществляем поиск ТСИ

      1. -поиск удачен, то заменяем его на адрес из ТСИ и генерируем машинную команду в соответствующем формате.

      2. -символическое имя в ТСИ не обнаружено – генерируется ошибка.

    2. -если обнаружена константа, то она переводится из внешнего представления во внутреннее, генерируется соответствующая команда.

  3. цикл заканчивается директивой end и генерируется запись конечного модуля.

Код1

Создание программ в перемещаемом формате

Либо с прямой либо с относительной адресацией.

  1. Прямая адресация

М относительный адрес модифицируемой команды(ОАМК)

Рис2

Недостаток таких программ: увеличение времени загрузки, увеличение размера объектного модуля.

Преимущества: гибкость.

Изменения в схеме ассемблирования:

-- дополнительная структура (таблица модификаторов)

Рис3

1й проход:

1. счетчику адреса присваиваем адрес загрузки

2. организуем цикл по обработке строк исходного текста программы, каждая строка которого обрабатывается следующим образом:

    1. разбиваем входную строку на 3 составляющие: метка, мнимо код и операндная часть

2.1.1. если в операндной части обнаружено символическое имя и оно присутствует в ТСИ, заменяем символическое имя относительным адресом из ТСИ и в таблицу модификаторов добавляем относительный адрес модифицируемой команды, в операндной части которой встретилось символическое имя.

    1. если в поле метки обнаружено символическое имя, то организуем поиск символического имени в ТСИ, если имя обнаружено, то генерируется ошибка. Если Си в ТСИ не обнаружено, то заносим его в ТСИ и с ним сопоставляем адрес из счетчика адреса

    2. Анализируем поле МКОП операции:

      1. Если в поле МКОП операции встретилась директива резервирования памяти, то значение счетчика адреса увеличивается на величину резервирования в памяти

      2. осуществляем поиск в ТКО.

      3. Если поиск неудачен, то генерируется ошибка неправильного кода операций

      4. Если поиск удачен, то заменяем МКОП двоичным представлением из ТКО и увеличиваем счетчик адреса на длину команды

3. производим выгрузку таблицы модификаторов в объектный модуль(М ОАМК).

  1. окончание цикла при достижении директивы END. При этом происходит вычисление длины программы.

рис4

достоинства: более гибкая программа; т к нет необходимости настраивать операндные части, то более шустрая загрузка ОП и меньший объем объектного модуля.

недостаток: более медленное выполнение

Изменения в схеме ассемблирования:

2й проход:

    1. Считываем 1ю строчку исходного текста программы и формируем запись-заголовок.

    2. организуем цикл по обработке строк исходного текста.

    1. анализируем поле операнда: если в нем обнаружено символическое имя, то осуществляем поиск ТСИ

2.1.1. Если обнаружено символическое имя и это имя есть в ТСИ(в операндной части), то заменяем символическое имя адресом, который получается как разность относительного адреса символического имени из ТСИ и значением счетчика-адреса. Это и получается смещение. Записываем его в команду.

      1. символическое имя в ТСИ не обнаружено – генерируется ошибка.

    1. если обнаружена константа, то она переводится из внешнего представления во внутреннее, генерируется соответствующая команда.

  1. цикл заканчивается директивой end и генерируется запись конечного модуля.

3. Смешанная адресация.

Выход из ситуации:

-- по типу команд

-- вставлять префикс, заключать в квадратные скобки и т п

12.03

Лекция №5

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]