- •Лабораторная работа № 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. Наблюдение результата работы макрогенератора
Увидеть работу макрогенератора
Если обработать исходный asm-файл вызовом компилятора ML с ключом /EP, то компилятор собственно трансляцию в машинные коды проводить не станет, выполнится только работа макрогенератора (препроцессора). Изменённый макрогенератором исходник компилятор ML будет выводить на стандартный вывод, т.е. на экран консоли. Читать можно, но неудобно. Мы же вполне можем его перенаправить в файл командой > наш_файл.какое_хотим_расширение. Потом этот файл откроем в редакторе и будем читать. Получится консольная команда вроде такой:
ML /ep myfile.asm > myfile.LST
Здесь выводному файлу мы заказали расширение LST («листинг»). Можно любое, но это всё равно будет текстовый файл.
Расширенный листинг
Существует и другой способ увидеть «развёрнутые» макросы – это создать при компиляции (параллельно с ней) так называемый расширенный листинг программы. Для этого в вызове компилятора следует дополнительно задать ключи /Fl[имя_файла_листинга] /Sa.
Компилятор строит расширенный листинг (назовем его для краткости ELST – “extended listing”) так. Он просматривает исходный текст сверху вниз. Каждая строка исходного текста переносится в ELST «как есть». Если эта строка является макровызовом, то ниже вставляются строки макрорасширения. Они метятся слева числом – уровнем вложенности макрорасширения.
Если строка исходника или вставленная строка макрорасширения является командой, то она компилируется. Что положено - пишется в объектный файл.obj. В ELST откомпилированная строка записывается в формате
Расширенный листинг, в принципе, дает полное представление о результатах работы компилятора. Для более полного представления приведем еще один фрагмент расширенного листинга.
1 2 3
---------┴----------------┴--------------------------
00000000 A1 00000000 R Mov EAX, Num1 ; 11223344
00000005 8A 15 0000001A R Mov dl, [Str2 + 3] ; J
macrodef EAX, EDX, Num1
1 LOCAL M3
0000000B 8B D0 1 mov EDX, EAX;обычная команда
1 ;с обычным комментарием
0000000D 1 ??0019:
0000000D FF 35 00000000 R 1 push Num1
Обратите внимание на колонку 2. Она содержит объектный код, который впоследствии реально попадает в готовую программу. Строчки, в которых колонка 2 пустая, не порождают объктного кода и служат только пользователю для лучшего понимания программы.
3. Порядок выполнения работы:
3.1 Создание консольной программы
На данном этапе не ставится перед вами задача самостоятельного написания какой-нибудь ассемблерной программы. Воспользуемся готовым примером.
Скопируйте в d:\sample2 файл :\MASM32\examples\exampl02\textio\ textio.asm. Откройте его в Notepad++, посмотрите, что там написано. Скопируйте этот файл в отчет по работе, прокомментируйте команды.
Откройте консоль и перейдите на d:\sample2. Рядом откройте окно Проводника с этой папкой, чтобы не обращаться каждый раз к dir для наблюдения за результатами. Все выполняемые по данному сценарию действия записывать в отчет и описывать наблюдаемые результаты.
Обеспечьте вызов компилятора и компоновщика изменением строки path, т.е. выполните path=d:\masm32;d:\masm32\bin;d:\masm32\lib;d:\masm32\include;%path%
Откомпилируйте исходник ml /c /coff textio.asm Что нового показал Проводник? Записать в отчет наблюдаемое.
Ml /? Прочитать и внести в отчет, что означают ключи /c и /coff.
Проведите компоновку ехе-модуля Link /SUBSYSTEM:CONSOLE /OPT:NOREF textio.obj
Что нового появилось в папке (смотреть в Проводник)? Записать в отчет наблюдаемое.
Link /? Выяснить смысл ключей /SUBSYSTEM:CONSOLE и /OPT:NOREF, записать в отчет.
Выполнить textio.exe. Скриншот программы внести в отчет (в случае печати отчета) или записать результат выполнения (в случае рукописного отчета).
