- •Общая часть
- •История появления ассамблера
- •Получение исполняемого файла
- •Регистры модели x86.
- •Организация цикла
- •Условный и безусловный переход
- •Особенности работы с графикой
- •2.2.2 Листинг программы №2
- •2.2 Постановка задачи №2
- •2.2.1 Выходные данные программы №2
- •2.3 Постановка задачи №3
- •2.3.1 Выходные данные программы №3
- •2.3.2 Листинг программы №3
- •2.4 Постановка задачи №4
- •2.4.1 Выходная форма программы №4
- •2.4.2 Листинг программы №4
Получение исполняемого файла
Рассмотрим основные этапы перевода программы из ASCII-кода в машинный код. Текст программы на Ассемблере набирается в любом текстовом редакторе и сохраняется в файле с расширением ASM. Перевод этого файла в EXE-программу происходит в два этапа:
перевод текста программы в машинные коды (ассемблирование);
сборка готовой программы из отдельных частей и установка адресов ссылок (компоновка, линковка).
Для ассемблирования используется программа MASM.EXE. При выполнении этой программы запрашиваются имена четырех файлов:
SOURCE FILENAME - имя исходного файла.
OBJECT FILENAME - имя OBJ-файла. В результате работы этой программы получается файл с расширениемOBJ;
SOURCE LISTING - имя файла, содержащего листинг трансляции. В этом файле находится, наряду с исходным текстом программы, его машинное представление;
CROSS-REFERENCE - имя файла, содержащего ссылки команд на различные поля данных. Этот файл полезен при написании больших программ.
Если в результате ассемблирования не обнаружено ошибок, то можно переходить к компоновке объектного модуля. Для ее проведения используется программа LINK.EXE. Она запрашивает имена четырех файлов:
OBJECT MODULES - список OBJ-файлов, из которых компонуется окончательная программа;
RUN FILE - имя исполняемого файла;
LIST FILE - имя файла, где будут находиться таблица имен и размеров сегментов и ошибки, обнаруженныеLINK;
LIBRARIES - имена подключаемых библиотек.
Если процесс линковки произошел без ошибок, то получится файл с расширением EXE.
EXE-файл получается и тогда, когда планировалось получить COM-файл. Если программа создается как COM-файл, то компоновщиком будет выдано сообщение:
Warning: No STACK Segment.
Это сообщение можно игнорировать, так как определение стека в программе не предполагалось. Для преобразованияEXE-файла в COM-файл используется программа EXE2BIN, общий вид использования которой следующий:
EXE2BIN <EXE-файл> <COM-файл> .
Таким образом, на диске будут находиться два файла с одинаковыми именами, но различными расширениями.
В качестве примера получим COM-файл из приведенной на предыдущем шаге программы.
Получим OBJ-файл. Для этого сформируем следующую командную строку:
MASM.EXE PR25_1.ASM .
В результате на диске получим файл PR25_1.OBJ.
Получим EXE-файл. Для этого сформируем следующую командную строку:
LINK.EXE PR25_1.OBJ .
В результате на диске получим файл PR25_1.EXE. Однако, помимо EXE-файла на экран будет выведено сообщение:
Warning: No STACK Segment.
Поэтому нужно перевести полученный EXE-файл в соответствующий COM-файл (понятно, что следующий пункт не выполняется для создаваемых EXE-файлов).
Получим COM-файл. Для этого сформируем следующую командную строку:
EXE2BIN.EXE PR25_1.EXE PR25_1.COM .
В результате на диске получим файл PR25_1.COM, который можно выполнить. На экране появится число 8.
Замечание. В некоторых случаях при выполнении последнего шага программа EXE2BIN генерирует следующее сообщение: Incorrect DOS version. В этом случае нужно обновить таблицу версий, воспользовавшись служебной программой SETVER.EXE, входящей в операционную систему Windows.
Формат использования этой программы следующий (приводится содержимое командной строки):
SETVER.EXE EXE2BIN.EXE 6.22
Отметим также, что в последних версиях операционной системы Windows в папке Windows/System32находится программа EXE2BIN.EXE. В этом случае можно воспользоваться ею и не обновлять таблицу версий.
