Анализ расширенного листинга программы

а) Создайте исходный файл 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. Название, цель работы
  2. Протокол выполнения работы с текстами ответов на все вопросы в заданиях пункта «Выполнение работы».
  3. Выводы по работе.
  4. Ответы на контрольные вопросы.

 

Вопросы к защите

1. Какова функция программы ML.EXE?

2. Какова функция программы LINK.EXE?

3. В чем разница в подготовке консольных приложений и оконных?

4. Что конкретно делает компоновщик во время компоновки ехе-модуля?

5. Чем отличаются интегрированная среда разработки и набор разработчика программ? К какому классу программных продуктов относится MASM32?

6. Какие особенности имеет инсталляция MASM32 на компьютер?

7. Какую роль выполняет в операционной системе переменная path?

8. Какими преимуществами обладает свободный текстовый редактор Notepad++?

9. Как задать обработчик для файлов исходных текстов на ассемблере?

10. Что такое макроопределение?

11. Как выполняется расширение макроопределения с параметрами?

12. Как обеспечивается уникальность меток в исходном тексте при многократных вставках одного и того же макроса с метками?

13. Как получить расширенный листинг компиляции ассемблерного модуля?

14. Как происходит расширение макровызова invoke?

 

 

Приложение