Проектирование алгоритмического и программного
Вид материала | Документы |
2.3. Форматы исполняемых кодов 2.3.1. Двоичный формат Code segment 2.3.2. Шестнадцатеричный формат 2.3.2.1. Intel HEX-86 2.3.2.2. Motorola S HEX |
- Российская академия государственной службы при Президенте Российской Федерации Проектирование, 246.7kb.
- Методические указания для выполнения курсовой работы по дисциплине «Методы оптимизации», 123.01kb.
- Примерная программа наименование дисциплины Проектирование и архитектура программных, 182.2kb.
- Учебная программа по дисциплине проектирование, разработка и стандартизация программного, 60.35kb.
- Лекция Основные понятия и особенности процесса разработки пп определение по. Понятие, 250.13kb.
- Образец резюме программиста, 44.28kb.
- Автоматизированное проектирование ис (case-технология), 75.02kb.
- Лекция 31 Тема 9 Экономическая эффективность программного изделия, 32.74kb.
- Рабочая программа по дисциплине «Физика» для направления подготовки дипломированного, 282.66kb.
- Методические указания к курсовому проекту по дисциплине проектирование устройств, 104.56kb.
2.3. Форматы исполняемых кодов
Тип исполняемого кода определяется компилятором (линковщиком). В программном обеспечении, связанном с отладкой и перепрограммированием МПК, используются два формата:
Двоичный (расширения - «.BIN», «.COM», «.PGM»);
Шестнадцатеричный (расширение - «.HEX»).
2.3.1. Двоичный формат
Как отмечалось выше, тело файла с расширениями «.C0M», «.BIN» или «.PGM» представляет собой двоичный образ программы, т.е. содержит набор кодов машинных инструкций, буквально соответствующих последовательности мнемонических команд ассемблера в исходном тексте. В силу этого при программировании МПК исполнительный модуль в виде файла с указанными расширениями может быть сразу «прошит» в ПЗУ.
В операционных средах DOS и Windows платформы Intel существует два типа исполняемых файлов: «.C0M» и «.EXE. Структура файлов с расширениями «.C0M» и «.EXE» представлено на рис.6а. Размер файла «.C0M» не превышает одного сегмента (64K), а размер файла «.EXE» не ограничен по числу сегментов.
Тело файла «.EXE» представляет собой образ задачи, которую построил линковщик, т.е. последовательное сочетание нескольких сегментов – кода, данных, стека, и имеет в начале файла заголовок, размером 512 байт. Заголовок состоит из стандартной части (форматированной зоны) и таблицы настройки адресов (таблицы размещения сегментов). Стандартная часть содержит признак файла «.EXE» - код ‘MZ’ и информацию, позволяющую вычислить размер программы и начальные значения кодового сегмента, сегмента стека и счетчика команд, необходимые для загрузки программы в ОЗУ.
Так, со смещением +2 в стандартной части содержится (2 байта) число байт part_page в последней странице файла (страница равна 512 байт). Со смещением +4 содержится (2 байта) размер программы file_size в страницах. Очевидно, что размер любой программы с расширением «.EXE» вычисляется в байтах как file_size*512+ part_page-512, где последнее вычитаемое есть размер заголовка.
После загрузки в ОЗУ под управлением операционной среды исполняемый модуль программы представляет собой последовательное расположение префикса программного сегмента PSP (Program Segment Prefix) размером 256 байт и загрузочного модуля (рис.6б). Префикс программного сегмента содержит служебную информацию для операционной системы. Для файла с расширением «.C0M» загрузочный модуль совпадает с двоичным образом программы, для файла с расширением «.EXE» он изменяется в соответствии с таблицей настройки адресов.
Так как префикс программного сегмента имеет размер 256 байт (100h), то для правильного старта файла с расширением «.C0M» в операционной среде указатель команд процессора должен быть настроен на стартовый адрес 100h. Это достигается использованием директивы управления адресом «.ORG». Пример начального фрагмента программы с расширением «.C0M» на ассемблере выглядит так:
CODE SEGMENT
ASSUME CS:CODE
.ORG 100h
START: ………….. ;Точка старта программы
…………..
CODE ENDS
END START
Отсутствие указанной директивы приведет к генерации ошибки линковщика.
2.3.2. Шестнадцатеричный формат
Шестнадцатеричный формат характерен для кросс-ассемблеров и представляет собой файл, в котором в текстовом символьном виде записана двоичная информация. Файл разбивается на записи (ASCII-строки) со своими адресами загрузки и контрольными суммами. Каждая запись начинается с поля маркера записи и кончается полем контрольной суммы. Всякая информация, размещенная после поля контрольной суммы до маркера следующей записи, игнорируется.
Существует несколько разновидностей шестнадцатеричного формата, например: Intel-83, Intel-86, Intel-386, Motorola, Tektronix. Рассмотрим две из них.
2.3.2.1. Intel HEX-86
Каждая запись состоит из 6 последовательно расположенных полей. Поле данных имеет переменную длину. Параметры каждого поля представлены в таблице 1.
Таблица 1
№ | Поле | Длина в байтах | Позиция в записи | Описание |
1 | Маркер записи | 1 | 1 | Символ ‘:’ (код 3Ah) |
2 | Количество байт в записи | 2 | 2 - 3 | Количество байт данных 00-признак конца файла |
3 | Адрес загрузки | 4 | 4 - 7 | Начальный адрес загрузки данных текущей записи |
4 | Тип записи | 2 | 8 - 9 | 00-двоичные данные 01-конец файла 02-номер параграфа 04-номер сегмента |
5 | Данные | - | 10 - n | По два шестнадцатеричных символа на каждый байт исходной информации, указанной в поле 2 |
6 | Контрольная сумма | 2 | (n+1) – (n+2) | Контрольная сумма как дополнение до 0 суммы по модулю 256 всех байт в полях 2-5 |
Для последней записи, содержащей признак конца файла, адрес загрузки используется как адрес старта программы.
Пример 1 записи Intel-86 (в символьном коде):
: 02 0210 00 FB88 69
Здесь: 02h – количество байт данных в записи; 0210h-адрес загрузки; 00h-тип записи (двоичные данные); FB88h-данные; 69h-контрольная сумма.
Пример 2 записи Intel-86 (в символьном коде):
: 00 0000 01 FF
Здесь: 00h – признак конца файла; 0000h-адрес старта программы; 01h-тип записи (конец файла); FFh-контрольная сумма.
2.3.2.2. Motorola S HEX
Каждая запись состоит из 6 последовательно расположенных полей. Поля адреса загрузки и данных имеют переменную длину. Параметры каждого поля представлены в таблице 2.
Таблица 2
№ | Поле | Длина в байтах | Позиция в записи | Описание |
1 | Индикатор | 1 | 1 | Символ ‘S’ (код 53h) |
2 | Тип записи | 1 | 2 | 0-заголовок 1 - 16р адресация 2 - 24р адресация 3 - 32р адресация 9 – конец файла |
3 | Количество байт в записи | 2 | 3 - 4 | Со следующего поля (4) до поля контрольной суммы (6) включительно |
4 | Адрес загрузки | 4 – 8 | 5 - x | x=08 – для 16р адресации x=10 – для 24р адресации x=12 – для 32р адресации |
5 | Данные | - | (x+1) - n | По два шестнадцатеричных символа на каждый байт исходной информации |
6 | Контрольная сумма | 2 | (n+1) – (n+2) | Дополнение до 1 суммы по модулю 256 полей 3 - 5 |
Пример записи Motorola S HEX (в символьном коде):
S 9 03 0000 FC
Здесь: 9h – тип записи (конец файла); 03h-количество данных в полях 4-6; 0000h-адрес; FCh-контрольная сумма.