LOCAL realbyte: BYTE:1
Счетчик1 определяет количество элементов с данным именем, Общий размер места ,выделяемого в стеке ,является произведением счетчика1 на счетчик2 и на размер одного элемента, определяемого типом элемента. Значение счетчика1 ,принимаемого по умолчанию -1.
Если в конце списка аргументов указан символ равенства и идентификатор ,то Turbo Assembler вычисляет общий размер блока аргументов в байтах и присваивает результат этому идентификатору. Это значение можно использовать в качестве аргумента команды RET , особенно если не используется соглашение о поддержке языков высокого уровня .В этом случае перед возвратом в вызывающую процедуру выполняется очистка стека от всех аргументов (‘это соответствует соглашениям языка PASCAL о вызовах процедур).
Описание
LOCAL LcalArray : byte : 100, LocalCount : word = AUTO_SIZE
определяет автоматически размещаемые переменные LocalArray и LocalCount. Значение метки LocalArray устанавливается эквивалентным [BP-100], а LocalCount - [BP-102], а в тексте процедуры можно обращаться по этим символьным именам. AUTO_SIZE - общее количество байтов, необходимое для размещения локальных переменных. Это значение необходимо вычесть из SP для выделения места в стеке под размещение указанных переменных.
Пример использования директивы LOCAL:
...
_TestSub PROC
LOCAL LocalArray:byte:100,LocalCount:word=AUTO_SIZE
push bp
mov bp,sp
sub sp,AUTO_SIZE
mov [LocalCount],10
...
mov cx,[LocalCount]
mov al,’A’
lea bx,[LocalArray]
FillLoop:
mov [bx],al
inc bx
loop FillLoop
mov sp,bp
pop bp
ret
_TestSub ENDP
...
Другим средством Turbo Assembler, предназначенным для улучшения интерфейса , является директива ARG. Директива ARG имеет следующий формат:
ARG аргумент [, аргумент] ... [= идентификатор]
[RETURNS аргумент [, аргумент ]]
Синтаксис параметра аргумент точно такое же как и для аргумента директивы LOCAL. В Turbo Assembler версии 3.2 или более поздней можно задать значение счетчика2, используя ключевое слово ?, которое указывает на переменное количество аргументов, предаваемых в процедуру. Например, если имеется следующее описание аргументов:
ARG tmp: WORD: ?
то аргумент tmp может состоять из любого количества слов.
Аргументы и локальные переменные адресуются в процедуре относительно регистра BP. Например:
...
func PROC NEAR
ARG a:WORD, b:DWORD:4, c:BYTE = d
LOCAL x:DWORD, y:WORD:2 = z
...
определяет a - [BP+4], b - как [BP+6], c - как [BP+14], d - как 20 (так как длина с по умолчанию равна 2) ; x - как [BP-2], y - как [BP-6] z - как 8.
Директива RETURN указывает на параметры, возвращаемые процедурой.
Директивы упрощенного описания сегментов
Директива MODEL
Директива MODEL позволяет задавать в программе одну из нескольких стандартных моделей сегментаций. Кроме того, ее можно использовать для указания языка в процедурах программы.
Синтаксист директивы MODEL:
.MODEL[модификатор]модель_памяти [имя_кодового_сегмента]
[,[модификатор_языка] язык][,модификатор]
Модель памяти может принимать одно из следующих значений:
|