Расширенные директивы описания процедур

Возможен следующий синтаксис описания процедуры:


ИМЯ proc [[МОДИФИКАТОР_ЯЗЫКА] ЯЗЫК] [РАССТОЯНИЕ]
[arg СПИСОК_АРГУМЕНТОВ]
[local СПИСОК_АРГУМЕНТОВ]
...
[ИМЯ] endp

Приведем синтаксис определения передаваемых процедуре ар­гументов:

arg АРГУМЕНТ [, АРГУМЕНТ ]... [ =ИМЯ ]

При определении локальных переменных процедуры использу­ется следующий синтаксис:

local АРГУМЕНТ [, АРГУМЕНТ ]... [ =ИМЯ ]

Отдельные аргументы имеют следующий синтаксис:

ИМЯ_АРГУМЕНТА [[ СЧЕТЧИК_1 ]] [: ТИП [: СЧЕТЧИК_2 ]]

Здесь ТИП – это тип данных аргумента – byte, word, dword и т.п.

СЧЕТЧИК_2 задает, сколько элементов данного типа определяет аргумент.

Например, в определении аргумента:

arg TMP: dword: 4

определяется аргумент с именем TMP, состоящий из 4 двойных слов. По умолчанию СЧЕТЧИК_2 имеет значение 1 (кроме аргумен­тов типа byte. Так как вы не можете занести в стек байтовое зна­чение, для аргументов типа byte значение счетчика по умолчанию равно 2, что обеспечивает для них в стеке размер в слово.

Например:

arg REALBYTE: byte: 1

СЧЕТЧИК_1 представляет собой число элементов массива. Если поле СЧЕТЧИК_1 не задано, то по умолчанию оно равно 1.

Если список аргументов завершается символом равенства (=) и идентификатором, то ассемблер будет приравнивать этот иденти­фикатор к общему размеру блока аргументов (в байтах). Если вы не используете автоматическое использование соглашений языков высокого уровня в ассемблере, то можете использовать данное значение в конце процедуры в качестве аргумента инст­рукции ret.

Аргументы и переменные определяются в процедуре как опе­ранды в памяти относительно BP. Передаваемые аргументы, опре­деленные с помощью директивы arg, имеют положительное сме­щение относительно BP. Локальные переменные, определенные с помощью директивы local, имеют отрицательное смещение от BP.

Например:

FUNC1 proc NEAR
arg A:word, B:word:4, C:byte =ArgSize
local X:dword, Y:word:2 =LocSize
...

Здесь A определяется, как [BP+4], B – [BP+6], C – [BP+14], а ArgSize – 20. X – [BP-2], Y – [BP-6], а LocSize – 8.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: