Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 4.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
117.91 Кб
Скачать

7. Превращение участка кода в макрос

Если при написании программы вы обнаружили, что определенный кусок кода встречается в программе больше двух-трех раз, то этот кусок вполне можно описать как макрос, а потом просто вставлять этот макрос в исходник.

Дан кусок кода. Никаких дополнительных требований к нему не предъявляется. Например, такой.

Mov eax, ebx

Push eax

Jmp b1

Превращаем этот фрагмент в макрос. Сверху дописываем заголовок макроса M1 MACRO, снизу – завершитель ENDM.

M1 MACRO

Mov eax, ebx

Push eax

Jmp b1

ENDM

8. Просмотр работы макрогенератора

Разместите в d:\masm32\bin пакетный файл LST.bat:

:: Получение листинга

@echo off

echo Вид исходника после макрогенератора

ml /EP %1 > %1.LST

pause

Создайте файл ma.asm:

M1 MACRO

Mov eax, ebx

Push eax

Jmp b1

ENDM

include \masm32\include\masm32rt.inc

.code

start:

M1

;---------------------------

M1

;---------------------------

M1

;---------------------------

end start

Выполните lst ma.asm. Создастся файл листинга ma.asm.LST. Интересующий нас участок находится в самом конце, после строки 50375. Смотрим результат макрорасширения.

9. Параметризация макроса

Изменить макрос М1 таким образом, чтобы вместо жёстко указанных в нем имен eax и ebx можно было бы указывать любые другие строки-параметры.

Вместо трёх вызовов М1 без параметров написать три вызова с разными параметрами.

Пересоздать ma.asm.LST , просмотреть результат макрорасширений.

10. Локализация внутренних меток в макросах

Вставьте в макрос М1 какую-нибудь метку, всё равно какую, например metka22: .

Пересоздать ma.asm.LST , просмотреть результат макрорасширений.

По ссылке http://msdn.microsoft.com/en-us/library/ebwyd354%28v=vs.71%29.aspx посмотрите, что означает ошибка «error A2005», и объясните причину ее появления.

После заголовка макроса М1 вставьте строку LOCAL metka22.

Пересоздать ma.asm.LST , просмотреть результат макрорасширений.

Сравнить полученный результат макрорасширений с предыдущим, объяснить наблюдаемое.

11. Макроимена и макропеременные

Придать исходнику ma.asm следующий вид:

M1 MACRO h1, h2

LOCAL metka22

Mov h1, h2

metka22:

Push h1

Jmp b1

ENDM

NameVar equ Variable2

include \masm32\include\masm32rt.inc

.code

start:

A=5

NameVar equ NewName

;-----------extention1------

M1 eax, A

;-----------extention2------

A=A+1

M1 NameVar, A

;-----------extention3------

A=20*A

M1 NewName, A

;---------------------------

end start

Пересоздать ma.asm.LST , просмотреть результат макрорасширений. Объяснить, как макрогенератор обрабатывает директивы equ и = .

12. Превратить исходный текст в макрос

Дан кусочек исходного текста с меткой внутри. Корректно преобразовать его в макрос.

13. Ручное макрорасширение

Макрос из задания 12 дважды подставить в программу, показав знание того, как обрабатываются повторные вставки меток.

14. Наблюдение результата работы макрогенератора

Действия по п.12 и 13 превратить в примитивный asm-модуль. Получить на компьютере листинг этого модуля. Показать, как выполнились макрорасширения. Объяснить наблюдаемый результат.