
- •Введение
- •2 Описание архитектуры микроэвм
- •Ряд команд не имеют аргументов и состоят только из кода операции, например, останов, сброс и установка флагов.
- •Описание системы команд и режимов адресации
- •3 Описание языка мнемокода
- •3.2 Разделы ассемблера
- •3.2.1 Алфавит
- •3.3 Описание структур данных модуля
- •4 Алгоритм трансляции
- •5 Описание объектного кода
- •6 Описание программного продукта
- •Приложение а
- •А.4 Основные этапы разработки
5 Описание объектного кода
5.1 Формат объектного файла
Объектный файл представляет собой текстовый файл, содержащий программу и специальную информацию о программе, которая позволяет перемещать программу в адресном пространстве процессора без потери её работоспособности и использовать в данной программе внешние ссылки (например, подпрограммы, находящиеся в других модулях).
Формат объектного файла представлен в таблице 4.2.
Объектный файл состоит из записей следующих типов: заголовок, определение, тело, модификатор, конец.
Таблица 5.1- Формат объектного файла
Запись-заголовок |
Записи-определения |
Тело программы |
Записи-модификаторы |
Запись-конец |
Формат записей.
Запись-заголовок.
Столбец 1 H
Столбцы 2-7 Имя программы
Столбцы 8-13 Начальный адрес программы (шестнадцатеричный)
Столбцы 14-19 Длина программы в байтах (шестнадцатеричная)
Тело программы.
Столбец 1 T
Столбцы 2-7 Начальный адрес данной записи (шестнадцатеричный)
Столбцы 8-9 Длина данной записи в байтах (шестнадцатеричная)
Столбцы 10-69 Объектный код (шестнадцатеричный)
Запись-конец.
Столбец 1 E
Столбцы 2-7 Адрес первой исполняемой команды объектной
программы (шестнадцатеричный)
Запись-определение.
Столбец 1 D
Столбцы 2-7 Идентификатор внешнего имени, определенный в
данной управляющей секции
Столбцы 8-13 Относительный адрес имени (шестнадцатеричный)
Столбцы 14-73 Информация, аналогичная столбцам 2-13 для других
внешних имен
Запись-модификатор.
Столбец 1 M
Столбцы 2-7 Начальный адрес модифицируемого адресного поля
относительно начала управляющей секции
(шестнадцатеричный)
Столбцы 8-9 Длина модифицируемого адресного поля в полубайтах
(шестнадцатеричная)
Столбец 10 Признак модификации (+/-)
Столбцы 11-69 Выражение, определяющее значение модификации
5.2 Пример объектного файла
HCOOL__000000000016
DX_____00Y_____01Z_____02K_____03
T00000016050103002201002100012201012600010
3E1401
M0401+COOL__
M0A01+COOL__
M1001+COOL__
E04
6 Описание программного продукта
6.1 Рекомендации к использованию
Программный продукт написан на языке Borland C++ Builder 6.0 . Чтобы увидеть результат работы кросс - ассемблера, необходимо запустить программу и указать путь к ASM-файлу. В том же каталоге создастся OBJ-файл. Необходимо добавить, что ASM-файл должен быть написан по стандарту, разработанному для данного курсового проекта.
6.2 Макроопределения и макрорасширения
При использовании макроопределений используются две директивы ассемблера – DEFMACRO и ENDMACRO. Первое предложение DEFMACRO идентифицируют начало макроопределения. Текст в поле метки является именем этого макроопределения. После директивы DEFMACRO следуют предложения, составляющие тело макро определения. Именно эти предложения и будут порождены в процессе макрогенерации.
Предложение макроинициализации определяет имя макроинструкции, которая должна быть инициализирована при порождении макрорасширения.
Для включения макроопределения в программу используется директива USEMACRO <имя>.
6.3 Макропроцессор.
Данный макропроцессор является двухпросмотровым. Поэтому любые макроопределения должны появляется в исходной программе прежде соответствующих предложений макроинициализации. Он также не предполагает наличие вложенных макро определений.
На первом просмотре составляется таблица макроопределений куда заносится, имя размер и код макроопределения.
Если во втором просмотре встречается директива USEMACRO <имя>, то вместо нее подставляется код макроопределения <имя>. Далее происходит связывание модулей и создание объектного файла - в соответствии с таблицами 3.1 и 3.2, где представлены структуры данных и их связывание.
6.4 Входные и выходные данные
Входные данные должны быть представлены в виде строк текста в кодировке ASCII. Выходные данные представляются в виде перемещаемого объектного модуля.
6.5 Связь модулей и функций
В процессе работы транслятор выполняет непосредственный синтаксический контроль всех операторов в инструкциях. Транслятор формирует из исходных программных файлов на разработанном языке перемещаемые объектные модули для описанного выше гипотетического процессора.
Для перевода исходной программы в ее объектное представление необходимо выполнить действия в следующем порядке:
Преобразовать мнемонические коды операций в их эквиваленты на машинном языке.
Преобразовать символические операнды в эквивалентные им машинные адреса.
Построить машинные команды в соответствующем формате.
Преобразовать константы, заданные в исходной программе, во внутреннее машинное представление.
Записать объектную программу и связать модули.
Разработанный транслятор выполняет два просмотра исходной программы. Основной задачей первого просмотра является поиск символических имен и назначение им адресов. Фактическая трансляция выполняется во время второго просмотра.
В программном продукте используются следующие функции:
function Int2Hex(x:word):string; - Переводит целое число в 16-ричный формат, представленный как строковое выражение.
function Int2Hex8(x:byte):string; - Представляет один байт как число в 16-ричном формате, представленное как строковое выражение.
function GetNumCom(X:byte); - выделяет номер команды из кода.
function SetParam(C:word); - выделяет параметры команды из ее кода.
function sR8(i,X:byte); - установка 8-разрядного регистра.
function sR16(i:byte;X:word); - установка 16-разрядного регистра.
function gR8(i:byte):byte; - получает значение 8-разрядного регистра.
function gR16(i:byte):word; - получает значение 16-разрядного регистра.
function Step1; - функция работы микрокоманды №1.
…
function Step41; - функция работы микрокоманды №41.
function GetnewModule; -создание перемещаемого объектного модуля.
Если во втором просмотре встречается директива USEMACRO <имя>, то вместо нее подставляется код макроопределения <имя>.
6.6 Комплект поставки и порядок инсталляции
Данный программный продукт поставляется на дискете либо компакт - диске. В него входят файлы «Cross.exe», «Cross.срр» (исходный код программы), а также пример транслируемого файла «1.asm» и результат трансляции в файле «1.obj». Чтобы помочь разобраться с программой, также поставляется файл «ПЗ» формата Word с текстом пояснительной записки.
Для инсталляции достаточно скопировать файл «Cross.exe» в любую папку на вашем компьютере. Потребуется всего лишь 1 мегабайт дискового пространства. Для работы программа не требует дополнительных библиотек, а обрабатываемые ASM-файлы могут находиться в любой папке. Транслятор в качестве результатов своей работы генерирует объектный файл с именем исходного файла и расширением .OBJ, находящийся в той же папке что и транслируемый ASM-файл.
ВЫВОДЫ
В результате выполнения данного курсового проекта был разработан кросс -ассемблер, включающий макропроцессор и собственно транслятор.
Также была разработана система команд и логическая структура процессора с заданной архитектурой. Несмотря на ограниченную длину команды и данных и, соответственно, неудобства в реализации некоторых команд, данная система команд позволяет создавать достаточно сложные программы.
Кросс - ассемблер компилирует исходную программу в объектный модуль, который затем с помощью какого-либо подходящего компоновщика может быть скомпонован с другими модулями и настроен для запуска в адресном пространстве микроЭВМ.
При написании кросс - ассемблера был применен нетрадиционный метод обработки данных (разбор выражений с помощью рекурсивного вычисления подвыражений, использование для обработки команд и директив специальных классов и т.д.), что позволило увеличить эффективность работы программы, уменьшить количество внутренних структур, сделать их проще.
В данном курсовом проекте не ставилась задача создать полноценный транслятор, обладающий всеми необходимыми возможностями для использования на реальной микроЭВМ. В нем отсутствуют некоторые директивы, есть существенные ограничения на типы используемых операндов и т.д. Тем не менее, разработанный кросс-ассемблер обладает базовыми функциональными возможностями для написания полноценных программ и может быть в дальнейшем доработан для более широкого круга задач.
ПЕРЕЧЕНЬ ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. Дж. Донован Системное программирование, пер. с англ., Л.Д. Райкова – М.: “Мир”,1975, стр. 540.
2. Использование Turbo Assembler при разработке программ / Сост. А. А. Чекатов. - Киев: “Диалектика”, 1995. - 288 с.
3. Сван Т. Освоение Turbo Assembler.- К.: “Диалектика”, 1996. - 544с.,ил.
4. Л.Бек Введение в системное программирование, пер. с англ., Н.А. Богомолова – М.: «Мир», 1988, стр. 448.