Анализ расширенного листинга программы
а) Создайте исходный файл coff1.asm такого содержания:
include \masm32\include\masm32rt.inc
; ИЗУЧЕНИЕ РАСШИРЕННОГО ЛИСТИНГА
;< 1. Здесь можно описывать макросы.>
macrodef MACRO par1, par2, par3
LOCAL M3
mov par2, par1 ; обычная команда
;с обычным комментарием
;; Скрытый комментарий
M3:
push par3 ;; обычные
pop par2 ;; команды
endm
.data
;<2. Здесь можно описывать статические переменные. >
Num1 dd 11223344h, 55667788h
Str1 db "ABCDEF", 0
.code
start:
;<3. Здесь можно вводить команды программиста. >
Mov EAX, Num1 ; 11223344
Mov dl, [Str2 + 3] ; J
macrodef EAX, EDX, Num1
.data
;<4. Здесь можно описывать статические переменные. >
Num2 dd 99aabbcch, 0ddeeff00h
Str2 db "GHIJKLM",0
.code
;<5. Здесь можно вводить команды программиста. >
Mov EBX,[Num2 + 4] ; DDEEFF00
Mov dl, [Str1 +4] ; E
macrodef Num2, ESI, EAX
; 6. примеры реальных вызовов макросов и процедур
print "Hello, world!" ; макрос сообщения
;--------------------------------------
invoke ExitProcess,0 ; выход в Windows
end start
б) Создайте пакетный файл LstExt.bat такого содержания:
@echo off
echo РАСШИРЕННЫЙ ЛИСТИНГ файла %1
ECHO.
ml /c /coff /Fl%1.ELST /Sa %1
PAUSE
в) Выполните LstExt coff1.asm. Результаты - это объектный файл coff1.obj и файл расширенного листинга coff1.asm.ELST который в данный момент нас интересует больше всего. Объектный файл нам тоже понадобится, но в следующей лабораторной работе.
г) Откройте coff1.asm.ELST в Notepad++ (кодировка Кириллица ОЕМ 866). Не удивляйтесь тому, что объем этого текстового файла около полумегабайта, и что он включает «всего-то» 101 тысячу с лишним строчек. Это – следствие подключения всех inc-файлов, скрыто упомянутых в первой строчке coff1.asm, и разворачивания всех попутно попадающихся там макровызовов. Разумеется, нам всё это в данной работе совершенно не нужно, поэтому надо удалить из coff1.asm.ELST всё лишнее. Открываем поиск Ctrl-F , вводим «ИЗУЧЕНИЕ», «Искать далее», и устанавливаем курсор перед строчкой «; ИЗУЧЕНИЕ ЛИСТИНГОВ». Shift-Ctrl-Home выделит всё до этого места. Del. Верхний мусор удалён.
д) Пролистать листинг вниз, установить курсор в конце строки «end start». Shift-Ctrl-End выделит всё от этого места до конца документа. Del. Нижний мусор также удалён. Сохранить «обрезанный» листинг.
е) Скопировать в отчет coff1.asm и укороченный coff1.asm.ELST.
ж) Провести сопоставление (ради этого, в общем, всё описываемое здесь и затевалось). Вручную обвести ручкой в исходнике рамочками строчки макровызовов со словами «macrodef», «print» и «invoke». Каждую рамочку снабдить числовой выноской.
Такую же работу выполнить в coff1.asm.ELST. То есть снабдить пронумерованными рамочками результаты макрорасширения всех макровызовов.
з) Сравнить визуально «что писалось в исходнике» с тем, «что поместил в листинг макрогенератор». Письменно прокомментировать и объяснить в отчете наблюдаемое. Особое внимание уделить тому, как передавались параметры макровызовов в макрорасширение и как обрабатываются локальные метки макроопределений при повторных макрорасширениях одного и того же макроопределения.
4. Содержание отчёта
- Название, цель работы
- Протокол выполнения работы с текстами ответов на все вопросы в заданиях пункта «Выполнение работы».
- Выводы по работе.
- Ответы на контрольные вопросы.
Вопросы к защите
1. Какова функция программы ML.EXE?
2. Какова функция программы LINK.EXE?
3. В чем разница в подготовке консольных приложений и оконных?
4. Что конкретно делает компоновщик во время компоновки ехе-модуля?
5. Чем отличаются интегрированная среда разработки и набор разработчика программ? К какому классу программных продуктов относится MASM32?
6. Какие особенности имеет инсталляция MASM32 на компьютер?
7. Какую роль выполняет в операционной системе переменная path?
8. Какими преимуществами обладает свободный текстовый редактор Notepad++?
9. Как задать обработчик для файлов исходных текстов на ассемблере?
10. Что такое макроопределение?
11. Как выполняется расширение макроопределения с параметрами?
12. Как обеспечивается уникальность меток в исходном тексте при многократных вставках одного и того же макроса с метками?
13. Как получить расширенный листинг компиляции ассемблерного модуля?
14. Как происходит расширение макровызова invoke?
Приложение