Приведем синтаксис определения передаваемых процедуре аргу- ментов:
ARG аргумент [,аргумент] . [=идентификатор] [RETURNS аргумент] [,аргумент]]
При определении локальных переменных процедуры используется следующий синтаксис:
LOCAL аргумент [,аргумент] . [=идентификатор]
Отдельные аргументы имеют следующий синтаксис:
имя_аргумента [[выражение_счетчик_1]] [: сложный_тип [:выражение_счетчик_2]]
где "сложный_тип" - это тип данных аргумента. Он может быть либо простым типом, либо сложным выражением-указателем. Подробнее о синтаксисе сложных типов рассказывается в Главе 5.
Если вы не задаете поле "сложный_тип", Турбо Ассемблер пред- полагает WORD. При выборе 32-разрядной модели он предполагает DWORD.
"Выражение_счетчик_2" задает, сколько элементов данного типа определяет аргумент. Например, в определении аргумента:
ARG tmp:DWORD:4
определяется аргумент с именем "tmp", состоящий из 4 двойных слов.
По умолчанию "выражение_счетчик_2" имеет значение 1 (кроме аргументов типа BYTE. Так как вы не можете занести в стек байто- вое значение, для аргументов типа BYTE значение счетчика по умол- чанию равно 2, что обеспечивает для них в стеке размер в слово. Это согласуется с языками высокого уровня, которые интерпретируют передаваемые в качестве параметров символьные переменные. Если вы действительно хотите задать аргумент, как один байт в стеке, нуж- но явным образом определить значение поля "выражение_счетчик_2", равное 1. Например:
ARG realbyte:BYTE:1
"Выражение_счетчик_1" представляет собой число элементов массива. Общее пространство, резервируемое для аргумента в стеке, равно произведению "выражения_счетчик_2" на длину, заданную полем "тип_аргумента" и на "выражение_счетчик_1". Если поле "выражение_ счетчик_1" не задано, то по умолчанию оно равно 1. Общее число аргументов задает произведение "выражения"_счетчик_1" на "выраже- ние_счетчик_2".