
- •Системное программирование на макроассемблере masm32
- •Содержание
- •Вступление
- •Префиксы «венгерской» нотации типов данных в описаниях вызовов функций аpi Win32 (Win64)
- •Работа с консолью
- •Цель работы
- •Теоретические сведения
- •Консоль
- •Начальные настройки
- •Как в cmd.Exe выделять-копировать-вставлять текст
- •История ввода команд
- •Заменяющие символы в шаблонах имён
- •Выполнение работы
- •Навигация по дискам и папкам
- •Поиск файлов и папок по имени или шаблону
- •Копирование, перенос, переименование и удаление файлов
- •Создание и уничтожение папок
- •Создание текстового файла
- •Просмотр содержимого файлов
- •Поиск файлов, содержащих нужную строку
- •Состав отчета по работе
- •Состав пакета масм
- •Последовательность создания исполняемого ехе-модуля на масм
- •Режимы компоновки
- •Выполнение работы
- •Создание консольной программы
- •Создание программы с графическим интерфейсом
- •Использование шаблона простой программы
- •Состав отчета по работе
- •Параметризация макросов
- •Уникальность меток при макрорасширениях
- •Макроконстанты
- •Макропеременные и макровычисления
- •Увидеть работу макрогенератора
- •Расширенный листинг
- •Выполнение работы
- •Макроопределение и макрорасширение
- •Повторение строк repeat
- •Цикл for
- •Анализ расширенного листинга программы
- •Состав отчета по работе
- •Потоки вывода и ввода
- •Вывод и ввод в консольных приложениях
- •Invoke GetStdHandle,std_output_handle ; манипулятор возвращен в еах, ...
- •InputBuffer db 25 dup (0) ; вводной буфер фрагмент 3
- •Высокоуровневый консольный ввод-вывод с использованием макросов
- •Макрос консольного вывода print
- •Макросыконсольного вводаinput и inkey
- •Преобразование строки в число
- •Inkey "Жду кнопочку."
- •Преобразование числа в строку
- •Выполнение работы
- •Invoke ExitProcess,0 ; выход в Windows
- •Эксперимент 1. Ввод-вывод функциями Win32
- •Эксперимент 2
- •Эксперимент 3
- •Эксперимент 4
- •Состав отчета по работе
- •Последовательное выполнение команд
- •Передача управления в другое место кода
- •Возврат управления в основную программу
- •Метка_к5:
- •Jmp Метка_к5
- •Call метка_процедуры
- •Передача параметров в процедуру
- •Внутренние переменные в процедурах
- •Как компилятор ml.ExEпомогает организовать работу с процедурами
- •Автоматическое создание пролога и эпилога
- •Автоматическое размещение внутренних переменных
- •Повышение надежности и облегчение вызовов – макрос invoke
- •Выполнение работы
- •Invoke ExitProcess,0 ; выход в Windows
- •Неразрешённые внешние ссылки
- •Выполнение работы
- •Программные инструменты для работы
- •Изготовление файлов для сравнений
- •Восстановление структуры двоичного представления объектного файла
- •Анализ неразрешенных внешних ссылок в объектном файле
- •Состав отчета по работе
- •Исполнение программы под отладчиком
- •Оперативная память «физическая» и виртуальная
- •Выполнение работы
- •Подготовка текстовых файлов для работы
- •Исследование структуры ехе-файла
- •Исследование выполнения программы под отладчиком
- •Карта размещения программы в виртуальной оперативной памяти
- •Действительные ссылки, бывшие раньше неразрешенными
- •Состав отчета по работе
- •Вопросы для самопроверки
- •Рекомендованная литература
Использование шаблона простой программы
Вы прочитали тексты исходников 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. Как это сделать, смотрите методичку по практическим занятиям, п. 1.3.2.
Открыть в редакторе пакет 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 Виден результат выполнения.
Состав отчета по работе
Номер и название работы, фамилия и группа студента.
Цель работы.
Протокол выполнения работы с текстами ответов на все вопросы в заданиях пункта «Выполнение работы».
Выводы по работе.
Вопросы для самопроверки
Какова функция программы ML.EXE?
Какова функция программы LINK.EXE?
В чем разница в подготовке консольных приложений и оконных?
Что конкретно делает компоновщик во время компоновки ехе-модуля?
МАКРОГЕНЕРАТОР И МАКРОСЫ
Цель работы
Изучить технику создания и применения макросов. Научиться наблюдать за результатами работы макрогенератора, встроенного в ml.exe.
Теоретические сведения
Здесь нет возможности рассказать всё про макросы и работу с ними – материала много, много всяких особых случаев и тонкостей. Ниже будет описано только самое главное для этой лабораторной работы. А для полной информации придётся читать учебник и интернет, ничего не поделаешь.
Макроопределение и макрорасширение
Макроопределение – это описание, которое связывает некий текст с его именем. Например:
Считалка MACRO
Раз, Два, три, четыре, пять
Всем ребятам надо спать.
ENDM
Здесь «Считалка» - это имя макроопределения (короче говорят «макроса»), а всё, что находится во второй и третьей строках макроопределения называется «телом макроса». Компилятор ML.EXE имеет в своей функциональности встроенную подсистему «макрогенератор» (иногда употребляется термин «препроцессор», особенно в англоязычных источниках), которая выполняет всю работу с макросами. Эта работа выполняется перед тем, как включается транслятор, который потом переводит текст исходника в машинный числовой формат.
Самое основное, что делает макрогенератор – он при обработке исходного текста сначала выполняет макрорасширения. Макрорасширение – это ЗАМЕНАвстретившегося в исходникеименимакроса на еготело. То есть, если в исходнике во многих местах встретилась строка («макровызов»)
Считалка
то ее каждое вхождение будет стёрто, а вместо неговезде будет подставлено
Раз, Два, три, четыре, пять
Всем ребятам надо спать.