
- •Системное программирование на макроассемблере masm32
- •«Системное программирование» (часть 1)
- •Вступление
- •1Организация среды исполнения для масм
- •1.1Цель работы
- •1.2 Теоретические сведения
- •If errorlevel 0 команда2
- •If errorlevel 0 goto метка
- •1.3Выполнение работы
- •1.4Состав отчета по работе
- •1.5Контрольные вопросы
- •2.2.2Состав пакета масм
- •2.2.3Центр масм – редактор Quick Editor
- •2.3Выполнение работы
- •2.4Состав отчета по работе
- •2.5Контрольные вопросы
- •3Высокоуровневый интерфейс языка масм
- •3.1Цель работы
- •3.2 Теоретические сведения
- •3.2.1Процедуры и макросы в ассемблере
- •3.2.2Синтаксис высокого уровня масм
- •3.2.3Макрос invoke
- •3.3Выполнение работы
- •4.2.2Потоки вывода и ввода
- •4.2.3Вывод и ввод в консольных приложениях
- •4.3Выполнение работы
- •4.4Состав отчета по работе
- •4.5Контрольные вопросы
- •5Ввод и вывод в ассемблерных приложениях с графическим интерфейсом
- •5.1Цель работы
- •5.2Теоретические сведения
- •5.3Выполнение работы
- •6.3.1Фрейм кода (области 1-5)
- •6.3.2Фрейм дампа памяти (области 9,10 и 11)
- •6.3.3Фрейм регистров процессора (области 6, 7 и 8)
- •6.3.4Фрейм стека (области 12, 13 и 14)
- •6.4Выполнение работы
- •6.5Состав отчета по работе
- •6.6Контрольные вопросы
- •Приложение а Префиксы «венгерской» нотации типов данных WinApi
- •Рекомендованная литература
3.3Выполнение работы
На простом примере проведем репетицию самостоятельного изучения маленькой готовой макропрограммы. Откройте файл \MACRO32\macros\macros.asm и найдите в нем макрос argcount. С помощью доступных источников информации (к примеру, \MASM32\help\masm32.chm) разобраться, как он работает и подробно построчно прокомментировать макрос argcoung. (Как минимум, выяснить всё про VARARG, LOCAL, FOR, семантику скобок <> и оператора %). Откомментированный макрос распечатать для отчета.
Скопируйте из папки \MASM32\examples\exampl01\generic\ файлы generic.asm и generic.exe в вашу рабочую папку. Из любопытства запустите generic.exe и походите по его меню. Обратите внимание на размер этого файла.
Откройте файл generic.asm и найдите в нем фрагмент в строках 255-256, там происходит сравнение wParam == 1000. Переведите с помощью Калькулятора число 1000 в hex-формат, запишите результат, это понадобится для дальнейшей работы.
Откройте в QE файл generic.exe. Выполните команду Tools> Dis-assemble EXE file. Откроется консоль с протоколом выполнения дизассемблера и новое окно QE, в нем демонстрируется файл disasm.txt. Окно консоли сразу закройте, оно не нужно.
Командой поиска найдите в disasm.txt текстовое hex-представление числа 1000 (см. п. в) ) Теперь вы видите в дизассемблированном коде место, эквивалентное строкам 255-256 исходного текста. Впишите в отчет строки 255-256 исходника и их вид в ассемблерном дизассемблированном коде. Весьма поучительно.
В тексте исходника generic.asm переведите любым доступным вам способом все английские комментарии на родной вам язык. Переделанный таким образом generic.asm распечатать для отчета. Да, это упражнение в английском. Но, во-первых generic.asm – это «is a roadmap around a standard 32 bit windows application skeleton written in MASM32» (андестенд?) и сразу разобраться с ним значит сильно облегчить себе начало самостоятельного практического программирования на MASM32. А во-вторых, программист без английского это как саксофонист без музыкального слуха, немного потренироваться в английском никогда не вредно.
3.4Состав отчета по работе
Название и номер работы, фамилия и группа студента.
Цель работы.
Протокол выполнения работы с текстами ответов на все вопросы в заданиях пункта «Выполнение работы».
Ответы на контрольные вопросы отдельно писать не надо. Распечатка переведенного файла generic.asm уже будет содержать их.
Личная подпись автора отчета.
3.5Контрольные вопросы
Каково назначение макроса szText?
Как логически связаны прототипы процедур и макрос invoke?
Какова роль метки start: в ассемблерных программах?
Как в generic.asm поясняется различие секций «.data» и «.data?» ?
4ВВОД И ВЫВОД В КОНСОЛЬНЫХ ПРИЛОЖЕНИЯХ
4.1Цель работы
Научиться пользоваться функциями ввода-вывода в консольных приложениях.
4.2 Теоретические сведения
4.2.1Основы взаимодействия прикладных программ и ОС Windows
Структура логических уровней компьютера может быть упрощенно показана как на рис. 4.1:
-
Уровень прикладных программ
Программный интерфейс WinAPI
Уровень операционной системы
Ядро ОС
Уровень аппаратуры и периферийных устройств
Рисунок 4.1 – Логические уровни компьютера
Прикладная программа обрабатывает данные за счет собственных ресурсов и при помощи своего алгоритма. Но всякое «общение» программы с внешним миром (пользователь – это тоже часть внешнего для программы мира) производится только с помощью ввода с периферийных устройств и вывода на них. В целях защиты компьютерной системы прикладные программы изолированы от прямого управления аппаратурой и для вывода-ввода должны запрашивать сервис от операционной системы. Запросы подобного рода производятся вызовами процедур и функций программного интерфейса приложений (Application Program Interface, API), который в ОС Microsoft Windows имеет имя «WinAPI». Чтобы вызовы API стали возможны и выполнялись правильно, при написании программы следует прописывать в ней директивы доступа к соответствующим прототипам и библиотекам (файлам типов inc и lib). Все примеры из пакета MASM32, рассматриваемые нами в лабораторных работах, подобные директивы имеют.