- •Лабораторная работа № 4
- •Цель работы
- •Краткие сведения из теории На что опирается программирование на ассемблере
- •Состав пакета масм
- •Последовательность создания исполняемого ехе-модуля на масм
- •Режимы компоновки
- •Макроопределение и макрорасширение
- •Параметризация макросов
- •Уникальность меток при макрорасширениях
- •Макроконстанты
- •Макропеременные и макровычисления
- •Увидеть работу макрогенератора
- •Расширенный листинг
- •3. Порядок выполнения работы:
- •3.1 Создание консольной программы
- •3.2 Создание программы с графическим интерфейсом
- •3.3 Использование шаблона простой программы
- •3.5 Макроопределение и макрорасширение
- •3.6 Повторение строк repeat
- •3.7 Цикл for
- •3.8 Анализ расширенного листинга программы
- •4. Содержание отчёта
- •5. Вопросы к защите
- •Самостоятельная работа по лабораторной работе № 4 «Технология создания ассемблерных программ»
- •1. Установка масм32
- •2. Настройка переменной path
- •7. Превращение участка кода в макрос
- •8. Просмотр работы макрогенератора
- •9. Параметризация макроса
- •10. Локализация внутренних меток в макросах
- •11. Макроимена и макропеременные
- •12. Превратить исходный текст в макрос
- •13. Ручное макрорасширение
- •14. Наблюдение результата работы макрогенератора
3.2 Создание программы с графическим интерфейсом
Повторим предыдущий сценарий, но будем создавать теперь программу с графическим интерфейсом на основе готового примера.
Скопировать в d:\sample2 файл minimum.asm из папки d:\MASM32\examples\example01\minimum\.
Прочесть его в редакторе, скопировать в отчет.
ml /c /coff /nologo minimum.asm Действие выполнить, команды вносить в отчет без дополнительных напоминаний.
Что нового появилось в папке? Чем отличается выполнение этой компиляции от действия г) в п.3.1? Записать в отчет. Выяснить, что такое ключ /nologo и записать это в отчет.
Выполнить Link /SUBSYSTEM:WINDOWs minimum.obj. Изменения в папке записать в отчет.
Выполнить minimum.exe. Скриншот или результат работы программы внести в отчет.
3.3 Использование шаблона простой программы
Вы прочитали тексты исходников textio.asm и minimum.asm и наверняка отметили значительное сходство их начальных частей, в которых упоминаются файлы с расширениями inc и lib.
Для облегчения создания таких заголовков в папке \include имеется файл masm32rt.inc, который содержит универсальный заголовок исходного текста MASM-программы. Наличие такого файла сильно упрощает начальный этап освоения ассемблера. В нем прописаны все директивы подключения текстовых inc- и библиотечных lib-файлов, что обеспечивает создаваемой программе полную возможность использовать наработанный в МАСМ инструментарий в виде макросов и процедур. Особенно хорошо то, что пользователю не нужно заботиться о правильной последовательности подключения упоминаемых ресурсов, там это уже сделано. Применение masm32rt.inc обеспечивает создание надёжных 32-разрядных консольных и Windows-приложений.
С учетом сказанного простейший шаблон ассемблерной программы выглядит так.
include \masm32\include\masm32rt.inc
;<Здесь можно описывать макросы.>
.data
;<Здесь можно описывать статические переменные. >
.code
start:
;< Здесь можно вводить команды программиста. >
; ------ завершение программы--------------
invoke ExitProcess,0 ; выход в Windows
end start
Другими средствами облегчения разработки ассемблерных программ являются два пакетных файла, которые находятся в \bin – это build.bat (для создания windows-приложений) и buildc.bat (для разработки консольных приложений). Чтобы вызовы и всех подключаемых файлов, и этих пакетов происходили без проблем, нужно «на постоянно» дополнить системную переменную path допиской d:\masm32;d:\masm32\bin;d:\masm32\lib;d:\masm32\include.
Открыть в редакторе пакет build.bat, внимательно просмотреть его, скопировать в отчет. Повторить это для пакета buildc.bat.
Проиллюстрируем сказанное созданием простейшей программы “Hello, world!”. Делаем исходник hello.asm (+ скопировать в отчет):
include \masm32\include\masm32rt.inc
;<Здесь можно описывать макросы.>
.data
;<Здесь можно описывать статические переменные. >
.code
start:
;< Здесь можно вводить команды программиста. >
print “Hello, world!” ; например, такую.
invoke ExitProcess,0 ; выход в Windows
end start
buildc hw Смотреть на выводы в процессе компиляции и компоновки. Описать наблюдаемое.
hw Виден результат выполнения.
3.4 Создание рабочей папки d:\MACRO.
Для наблюдений за работой макрогенератора создадим предельно простой шаблон. Исключим подключение всех inc файлов и библиотек (если их оставить, то это в текстовый исходник добавит ни много, ни мало, а около 40 тысяч строк; здесь нам это совершенно ни к чему, только будут мешать наблюдениям). Итак, шаблон:
.486
.MODEL flat, stdcall
; точка1 - место макроопределений
.data
; точка2 - секция данных
.code
; точка3 - секция кода
end
Поместите его в рабочую папку под именем, например, m0.asm.
Второе, что понадобится для удобства работы – пакетный файл, пусть для конкретности он будет называться mg.bat и его мы тоже разместим в рабочей папке:
:: --------------- MG.BAT ----------------
@echo Обрабатывется файл %1.ASM.
@if exist %1.lst del %1.lst
\masm32\bin\ml /EP /nologo %1.asm > %1.lst
@echo.
@echo Результат работы макрогенератора (%1.LST)
@echo -------------------------------------------------
@type %1.lst
@pause
Приступаем к экспериментам.
