Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet194/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   190   191   192   193   194   195   196   197   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Директива INVOKE
Для более удобного вызова процедур с параметрами, передающимися через стек,
MASM предоставляет специальное средство в виде директивы INVOKE:
INVOKE
Основная ее задача — сформировать код, который, во-первых, размещает аргу-
менты в стеке, во-вторых, вызывает процедуру и, в третьих, чистит стек после за-
вершения работы процедуры. Например, традиционный способ вызова процеду-
ры выглядит так:
push
push
push
call
С использованием INVOKE тот же самый вызов будет выглядеть следующим об-
разом:
INVOKE
Для INVOKE аргумент
не должен быть опережающей ссылкой на
адрес. Чтобы исключить подобные ситуации, существует «парная» для INVOKE ди-
ректива PROTO:


342 Глава
Модульное программирование
PROTO [расстояние] [язык] [,
Эта директива информирует ассемблер о количестве и типах аргументов, кото-
рые принимает процедура. Использование данной директивы позволяет ассемб-
леру выполнять проверку типов. Обычно все директивы PROTO для процедур соби-
раются в начале исходного текста программы либо в отдельном включаемом файле.
Директива PROTO принимает три типа аргументов — расстояние, язык, параметры
процедуры с указанием их типов.
т Аргумент расстояние (NEAR, FAR, NEAR16, NEAR32,
или FAR32) влияет на раз-
мер адреса, формируемого ассемблером для вызова процедуры. По умолчанию
значение этого параметра определяется исходя из текущей модели памяти и типа
процессора.
Аргумент язык для определения стиля и соглашения по вызову процедуры в ка-
честве значения принимает имя языка (табл. 15.1).
Аргумент параметр представляет собой последовательность перечисленных че-
рез запятую параметров процедуры. Исходя из этой информации, при вызове
процедуры ассемблер преобразует последовательность параметров в последо-
вательность команд PUSH с формированием соответствующих адресов парамет-
ров процедуры в стеке.
Аргумент
— один из допустимых ассемблером простых типов данных. В ка-
честве типа может быть указано слово VARARG. Оно предназначено для опреде-
ления процедур с переменным числом аргументов. Тип VARARG указывается
с последним параметром, заданным в директиве PROTO. Тип VARARG можно ис-
пользовать, если аргументом язык является С, SYSCALL или
Таблица
Передача аргументов в языках высокого уровня
Операнд
«язык»
NOLANGUAGE
BASIC
PROLOG
FORTRAN
С
PASCAL
STDCALL
SYSCALL
Язык
аргументов
Ассемблер
Basic
Prolog
Fortran
С
C++
Pascal

C++
Направление передачи
стека
Слева направо
Слева направо
Справа налево
Слева направо
Справа налево
Справа налево
Слева направо
Справа налево
Справа налево
Процедура очистки
Вызываемая
Вызываемая
Вызывающая
Вызываемая
Вызывающая
Вызывающая
Вызываемая
Вызываемая
Вызывающая
Приведем типовую последовательность действий в программе для вызова про-
цедуры в MASM:
прототипа процедуры prod
PROTO
процедуры


Процедуры в языке ассемблера 343
invoke prod,
arg2
Следует отметить разницу в описании процедур в MASM и TASM. Общий вид
представления процедуры в MASM
на стиль TASM, но имеет отличия
в синтаксисе и содержании:
PROC [расстояние] [язык] [видимость]
[USES
[LOCAL
тело процедуры
[RET
ENDP
Параметры расстояние, язык и видимость имеют сходные с описанием процеду-
ры в TASM значения. Параметр расстояние показывает локализацию места, из ко-
торого может быть вызвана процедура, с помощью одного из ключевых слов:
FAR, NEAR16, NEAR32,
или FAR32. Параметр язык — один из допустимых типов
табл. 15.1). Параметр видимость
других модулей и имеет одно из значений PRIVATE (по умолчанию), PUBLIC или
EXPORT. Этот параметр можно изменить директивой OPTION PROC.
Последней командой процедуры обычно является RET. В качестве ее операнда
можно указать число байтов, которые процедура должна удалить из стека при воз-
врате управления в точку вызова.
Ассемблер автоматически генерирует код пролога и эпилога для правильной
передачи аргументов в процедуру через стек и очистки стека при возврате из нее.
Код пролога и эпилога можно несколько изменить применением директив OPTION
PROLOGUE и OPTION EPILOGUE.
Локальные переменные объявляются в процедуре директивой LOCAL (перед
любыми командами). В процедуре может быть несколько директив LOCAL.
Аргументы пролога/эпилога — аргументы, определяющие особенности пролога
и эпилога процедуры. Аргументы по умолчанию — PROLOGUE и EPILOGUE. Другие
значения:
- FORCEFRAME — генерация сегмента стека;
LOADDS —
регистра DS в прологе процедуры и восстановление его
в эпилоге.
Если аргументов несколько, то они разделяются запятыми.
При вызове процедуры можно указать регистры общего назначения, которые
нужно сохранить в стеке и назначить символические имена адресам в стеке, кото-
рые логически являются параметрами процедуры. Все это делает директива USES.
Имена перечисляемых регистров разделяются пробелами, а имена переменных —
запятыми. Для переменных может указываться тип. В качестве значения типа мо-
жет быть либо имя простого типа (например, DWORD), либо VARARG. Служебное слово
VARARG позволяет задать переменное число параметров. При его использовании
оно должно быть последним в списке параметров процедуры. Служебное слово
VARARG указывается только, если параметр язык равен С,
или
По
умолчанию параметр тип равен WORD для 16-разрядного сегмента и DWORD — для
32-разрядного сегмента.


344 Глава
Модульное программирование

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   190   191   192   193   194   195   196   197   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish