
- •Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение
- •«Комсомольский-на-Амуре государственный технический университет»
- •1 Основные сведения
- •1.1 Структура программы на Ассемблере
- •1.1.1 Программа типа сом
- •1.1.2 Программа типа ехе
- •1.2 Порядок работы с tasm. Создание exe-файла
- •1) Редактирование
- •2) Ассемблирование
- •3) Компоновка
- •4) Выполнение
- •1 0000 .Model small
- •2 Задание к лабораторной работе
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Комсомольский-на-Амуре государственный технический университет»
Кафедра «Промышленная электроника»
Создание исполняемого файла программы
на Ассемблере
Методические указания к лабораторной работе по курсу
«Отладочные средства микропроцессорных систем» для студентов направления 210100 «Электроника и наноэлектроника»
Комсомольск-на-Амуре 2013
УДК 621.385
Создание исполняемого файла программы на ассемблере: Методические указания к лабораторной работе по курсу "Отладочные средства микропроцессорных систем" для студентов направления 210100 «Электроника и наноэлектроника» / Сост. С.М. Копытов. - Комсомольск-на-Амуpе: Комсомольский-на-Амуpе гос. техн. ун-т, 2013. - 16 с.
Описана работа с компилятором TASM по созданию исполняемых программ в EXE-формате.
Предлагаемые методические указания предназначены для студентов направления 210100.
Печатается по постановлению редакционно-издательского совета Комсомольского-на-Амуре государственного технического университета.
Согласовано с отделом стандартизации.
Рецензент В.А. Егоров
Цель работы: ознакомиться с процедурой создания исполняемой программы в EXE-формате на алгоритмическом языке TASM.
1 Основные сведения
Процесс трансляции программы на языке ассемблера в объектный код называют ассемблированием. В отличие от компилирования, ассемблирование — более однозначный и обратимый процесс. В языке ассемблера каждой мнемонике соответствует одна машинная инструкция, в то время как в языках программирования высокого уровня за каждым выражением может скрываться большое количество различных инструкций.
Turbo Assembler (TASM) — программный пакет компании Borland, предназначенный для разработки программ на языке ассемблера для микропроцессоров с архитектурой x86. Кроме того, TASM может работать совместно с трансляторами с языков высокого уровня фирмы Borland, такими как Turbo C и Turbo Pascal.
1.1 Структура программы на Ассемблере
Программа на ассемблере содержит набор операторов, располагаемых в текстовом файле в определенном порядке. Операторы языка ассемблера разделяют на мнемоники команд микропроцессора и директивы. Мнемоники команд микропроцессора транслируются в машинные коды команд, а директивы служат для управления процессом трансляции.
Рассмотрим различия между двумя видами исполняемых программ – типа СОМ и типа EXE.
1.1.1 Программа типа сом
Рассмотрим исходный текст простой программы hello-l.asm.
.model tiny
.code
org 100h
start: mov ah, 9
mov dx, offset mess
int 21h
ret
mess db 'Hello World!', 0Dh, 0Ah, '$'
end start
Первая строка определяет модель памяти TINY, в которой сегменты кода, данных и стека объединены. Эта модель предназначена для создания файлов типа СОМ, размер которых не может превышать 64 килобайта.
Директива .CODE начинает сегмент кода, который в нашем случае также должен содержать и данные. Директива ORG 100h устанавливает значение программного счетчика в 100h, так как при загрузке СОМ-файла в память DOS занимает первые 256 байт (100h) блоком данных PSP (префикс программного сегмента) и располагает код программы только после этого блока. Все программы, которые компилируются в файлы типа СОМ, должны начинаться с этой директивы.
Метка START располагается перед первой командой в программе и будет использоваться в директиве END, чтобы указать, с какой команды начинается программа.
Команда MOV АН, 9 помещает число 9 в регистр АН. Это — номер функции DOS «вывод строки». Команда MOV DX, OFFSET MESS помещает в регистр DX смещение метки MESS относительно начала сегмента данных, который в нашем случае совпадает с сегментом кода. Если записать MOV DX, MESS, то в регистр DX будут помещены коды букв «He».
Команда INT 21h вызывает системную функцию DOS. Команда INT — основное средство взаимодействия программ с операционной системой. В нашем примере вызывается функция DOS номер 9 — вывести строку на экран. Эта функция выводит строку от начала, адрес которого задается в регистрах DS:DX, до первого встреченного символа $. При загрузке СОМ-файла регистр DS автоматически загружается сегментным адресом программы, а регистр DX был загружен предыдущей командой.
Команда RET используется обычно для возвращения из процедуры. DOS вызывает СОМ-программы так, что команда RET корректно завершает программу. DOS при вызове СОМ-файла помещает в стек сегментный адрес программы и ноль, так что RET передает управление на нулевой адрес текущего сегмента, то есть на первый байт префикса программного сегмента (PSP). PSP предваряет любую программу при загрузке ее в память и имеет размер 25610=10016 байт.Там находится код команды INT 20h, которая и используется для возвращения управления в DOS. Можно сразу заканчивать программу командой INT 20h, хотя это длиннее на 1 байт.
Следующая строка программы HELLO-1.ASM определяет строку данных, содержащую текст «Hello World!», управляющий символ ASCII «возврат каретки» с кодом 0Dh, управляющий символ ASCII «перевод строки» с кодом 0Ah и символ «$», завершающий строку. Эти два управляющих символа переводят курсор на первую позицию следующей строки точно так же, как в строках на языке С действует последовательность «\n». Апострофы приказывают ассемблеру заменить символы на их ASCII-коды.
И наконец, директива END завершает программу, одновременно указывая, с какой метки должно начинаться выполнение программы.
Обратите внимание, что числа в программах могут быть записаны в различных системах счисления. После десятичных чисел букву не ставят, после двоичных используют «b», а после шестнадцативичных «h».