- •Лабораторная работа № 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. Наблюдение результата работы макрогенератора
Режимы компоновки
Компоновщик LINK.EXE способен создавать ехе-модули, которые вызываются на исполнение как консольные программы (ключ /SUBSYSTEM: CONSOLE). Они исполняются с использованием окна программы cmd.exe, которое автоматически открывается при их запуске. Такие программы малы по размеру, исполняются быстро и потребляют очень мало ресурсов. Правда, имеют скромный символьный интерфейс.
Программы с графическим интерфейсом пользователя (GUI – Graphic User Interface) также можно создавать на макроассемблере. По сравнению с консольными программами они должны создаваться не только из исходного файла и подключаемых библиотек. Для такой программы дополнительно нужно создать т.н. «ресурсный файл» (*.rc), в котором на макроязыке описываются все графические компоненты интерфейса – кнопки, иконки, поля текстового ввода-вывода и т.п. Для создания подобных файлов обычно используются специальные приложения.
Ресурсные файлы нужно откомпилировать специальным компилятором ресурсов. Их в МАСМе целых два – rc.exe и porc.exe, оба лежат в \bin. Результатом компиляции является «ресурсный объектный файл», с расширением res.
На этапе компоновки LINK.EXE собирает ехе-модуль не только из obj- и lib-файлов, но подключает также и res-файлы(ы) (ключ /SUBSYSTEM: WINDOWS). Получившийся ехе-модуль запускается в GUI-программу.
Макроопределение и макрорасширение
Макроопределение – это описание, которое связывает некий текст с его именем. Например:
Считалка MACRO
Раз, Два, три, четыре, пять
Всем ребятам надо спать.
ENDM
Здесь «Считалка» - это имя макроопределения ( «макроса»), а всё, что находится во второй и третьей строках макроопределения называется «телом макроса». Компилятор ML.EXE имеет в своей функциональности встроенную подсистему «макрогенератор» (иногда употребляется термин «препроцессор», особенно в англоязычных источниках), которая выполняет всю работу с макросами. Эта работа выполняется перед тем, как включается транслятор, который потом переводит текст исходника в машинный числовой формат.
Самое основное, что делает макрогенератор – он при обработке исходного текста сначала выполняет макрорасширения. Макрорасширение – это ЗАМЕНА встретившегося в исходнике имени макроса на его тело. То есть, если в исходнике во многих местах встретилась строка («макровызов»)
Считалка
то ее каждое вхождение будет стёрто, а вместо него везде будет подставлено
Раз, Два, три, четыре, пять
Всем ребятам надо спать.
Параметризация макросов
Макросы могут иметь формальные строковые параметры, которые перечисляются в строке заголовка после слова MACRO через запятую. Например, приведенное выше макроопределение можно переделать в параметризованное так.
Считалка MACRO парам1, п2, па3, параметр4, п5
парам1, п2, па3, параметр4, п5
Всем ребятам надо спать.
ENDM
Тогда при макровызове можно задать фактические параметры, которые будут подставлены на место формальных при макрорасширении:
Считалка Мы , , устали, , танцевать
будет преобразована макрогенератором в макрорасширение:
Мы,, устали,, танцевать
Всем ребятам надо спать.
Обратите внимание, что здесь второй и четвертый фактический параметры заданы пустыми. Фактический параметр заменяет в теле макроопределения формальный по принципу «строка заменяет строку».
