РуЛиб - онлайн библиотека > Добровольская Наталья > Учебники и самоучители по компьютеру > Ассемблер в примерах и задачах > страница 2

Читаем онлайн «Ассемблер в примерах и задачах» 2 cтраница

которое
появляется под окном программы, выводится текст:
C:\Masm32\Bin\ML.EXE /c /coff /Cp /nologo
/I"C:\Masm32\Include" "HelloWord.asm"
Assembling: HelloWord.asm
Make finished.
Total compile time 297 ms
Окно Output появляется на время ассемблирования и
закрывается. Чтобы повторно увидеть результаты, необходимо
курсор мыши перевести в нижнюю часть активного окна среды
RadASM.
Первая строка сообщения об ассемблировании — вызов
ассемблера:
C:\Masm32\Bin\ML.EXE — полное имя файла транслятора
ассемблера masm32 (путь + имя), за которым следуют опции:
/c — заказывает ассемблирование без автоматической
компоновки;
/coff — определяет формат объектного модуля Microsoft
(coff);
/Cp — означает сохранение регистра строчных и прописных
букв всех идентификаторов программы;
/nologo — осуществляет подавление вывода сообщений на
экран в случае успешного завершения ассемблирования;
/I"C:\Masm32\Include" — определяет местонахождение
вставляемых (.inc) файлов;
"HelloWord.asm" — имя обрабатываемого файла.
Остальные строки — сообщение о начале и завершении
процесса ассемблирования и времени выполнения этого процесса.
Результатом нормального завершения ассемблирования
является создание файла, содержащего объектный модуль
программы, — файла HelloWord.obj.
Если при ассемблировании обнаружены ошибки, то
объектный модуль не создается и после сообщения о начале
ассемблирования идут сообщения об ошибках, например:
HelloWord.asm(14):error A2006: undefined symbol: EDY
8
Формирование исполняемого приложения
В сообщении указывается:
− номер строки исходного текста (в скобках);
− номер ошибки, под которым она описана в документации;
− возможная причина.
После исправления ошибок процесс ассемблирования
повторяют.
Следующий этап — компоновка программы. На этом этапе к
объектному (двоичному) коду программы добавляются объектные
коды используемых процедур. При этом в тех местах программы,
где происходит вызов процедур, указывается их относительный
адрес в модуле. Сведения о компоновке также выводятся в окно
Output:
C:\Masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE
/VERSION:4.0 /LIBPATH:"C:\Masm32\Lib"
/OUT:"HelloWord.exe" "HelloWord.obj"
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights
reserved.
Make finished.
Total compile time 109 ms
Первая строка вывода также является командной строкой
вызова компоновщика:
C:\Masm32\Bin\LINK.EXE — полное имя компоновщика, за
которым следуют опции:
/SUBSYSTEM:CONSOLE — подключить стандартное окно
консоли;
/RELEASE — создать реализацию (а не отладочный вариант);
/VERSION:4.0 — минимальная версия компоновщика;
/LIBPATH:"C:\Masm32\Lib" — путь к файлам библиотек;
/OUT:"HelloWord.exe" — имя результата компоновки —
загрузочного файла и параметр "HelloWord.obj" — имя
объектного файла.
После устранения ошибки программу необходимо
перетранслировать и заново скомпоновать.
Если процессы трансляции и компоновки прошли нормально,
то ее можно запустить на выполнение. При этом открывается окно
консоли, в которое выводится строка запроса.
9
Ассемблер в примерах и задачах
Окно закрывается при нажатии любой клавиши.
1.2. СТРУКТУРА ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА
Программа
структуру:
на
языке
ассемблера
имеет
следующую
.686
.model flat, stdcall
option casemap: none
.data
.data?
.const
.code

end
Директива .686 указывает компилятору ассемблера, что
необходимо
использовать
набор
операций
процессора
определённого поколения.
Директива .model позволяет указывать используемую
модель памяти и соглашение о вызовах. Как уже было сказано, на
архитектуре Win32 используется только одна модель памяти –
flat, что и указано в приведённом примере. Соглашения о вызовах
определяют порядок передачи параметров и порядок очистки
стека.
10
Структура программы на языке ассемблера
Директива option casemap: none заставляет компилятор
языка ассемблера различать большие и маленькие буквы в метках
и именах процедур.
Директивы .data, .data?, .const и .code определяют то,
что называется секциями. В Win32 нет сегментов, но адресное
пространство можно поделить на логические секции. Начало
одной секции отмечает конец предыдущей. Есть две группы
секций: данных и кода.
Секция .data содержит инициализированные данные
программы.
Секция .data? содержит неинициализированные данные
программы. Иногда нужно только предварительно выделить
некоторое количество памяти, не инициализируя её. Эта секция
для
этого
и
предназначается.
Преимущество
неинициализированных данных в том, что они не занимают места
в исполняемом файле. Вы всего лишь сообщаете компилятору,
сколько места вам понадобится, когда программа загрузится в
память.
Секция
.const
содержит
объявления
констант,
используемых программой. Константы не могут быть изменены.
Попытка изменить константу вызывает аварийное завершение
программы.
Задействовать все три секции не обязательно.
Есть только одна секция для кода: .code. В ней содержится
весь