Область действия имен

Если для аргументов и локальных переменных, а также меток операторов в подпрограмме, не заданы имена с предшествующим префиксом локального идентификатора, все аргументы, заданные в заголовке процедуры, определены ли они с помощью директивы arg или local и метки имеют глобальную область действия.

Идентификаторы с локальной областью действия разрешает ди­ректива locals (не путать с директивой local).

Например:

locals __
TST1 proc
arg __A: word, __B: word, __C: byte
local __X: word, __Y: dword
...

В этом примере директива locals __ определяет двойной символ подчеркивания как префикс локальных имен. Это означает, что все имена, начинающиеся с данной пары символов, будут счи­таться локальными в пределах подпрограммы.

Итоги

Соединив все, что было сказано в предыдущих параграфах, можно предложить следующий шаблон подпрограммы:


locals __

...
Func proc near
arg __p1: word, __p2: word,... = __ArgSize
local __v1: byte, __v2: word,... = __LocSize
;Действие:...
;Входные параметры:...
;Выходные параметры:...
;Возвращает:...
;Обращение:...
;Замечания:
; регистры не модифицирует
; стек чистит от параметров

push BP;+ BP - указатель
mov BP, SP;- кадра стека
sub SP, __LocSize;выделение памяти для лок. переменных
push SI, DI;сохранение регистров
...
mov SI, __p1;доступ к параметру
...
mov __v2, SI;доступ к локальной переменной
...
pop DI, SI;восстановление регистров
mov SP, BP;чистка стека от лок. переменных
pop BP;восстановление BP
ret __ArgSize;возврат и чистка стека от параметров
Func endp


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



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