Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Управление областью действия идентификаторов - Программирование от RIN.RU
Управление областью действия идентификаторов



Директивы LOCALS и NOLOCALS


Турбо Ассемблер использует двух символьный код, присоединяемый к идентификаторам в виде префикса и определяющий, что идентификатор в процедуре имеет локальную область действия. Это префикс локального идентификатора обозначается как @@. Для разрешения идентификаторов, имеющих локальную область действия, можно использовать директиву LOCALS. Ее синтаксис имеет следующий вид:


LOCALS [префикс_идентификатора]


Необязательное поле "префикс_идентификатора" содержит идентификатор (размером в два символа), который Турбо Ассемблер будет использовать в качестве префикса локального идентификатора. Например:


LOCALS ; по умолчанию подразумевается использование
; в качестве префикса @@
foo proc
@@a: jmp @@a ; этот идентификатор @@a относится к
; процедуре FOO
foo endp


bar proc
@@a: jmp @@a ; этот идентификатор @@a относится к про-
; цедуре BAR
bar endp


Если вы хотите запретить идентификаторы с локальной областью действия, можно использовать директиву NOLOCALS. Она имеет следующий синтаксис:


NOLOCALS


Заметим, что вы можете использовать идентификаторы с областью действия в границах блока вне процедур. В этом случае область действия идентификатора определяется метками, заданными с помощью двоеточия, которые на являются идентификаторами с областью действия в границах блока. Например:


foo: ; начало области действия
@@a: ; относится к области действия, начинающейся
; FOO:
@@b = 1 ; относится к области действия, начинающейся
; FOO:
BAR: ; начало области действия
@@a = 2 ; относится к области действия, начинающейся
; BAR:




Область действия в границах блока в MASM


В MASM версий 5.1 и 5.2 метки NEAR, определенные с помощью директивы двоеточия (:), если они находятся в процедуре, и если вы выбрали в директиве MODEL соглашения языка, имеют область действия в границах блока. Однако эти идентификаторы не являются полными идентификаторами, имеющими область действия в границах блока: нигде в программе их нельзя определить никак иначе, чем как ближнюю метку. Например:


varsion m510
model small,c


codeseg


foo proc
a: jmp a ; относится к процедуре FOO
foo endp


bar proc
a: jmp a ; относится к процедуре BAR
bar endp


a = 1 ; недопустимо!


Локальные метки в стиле MASM


В MASM 5.1 и 5.2 предусмотрены специальные идентификаторы, которые вы можете использовать для управления областью действия ближних меток в небольшом диапазоне строк. Это идентификаторы @@, @F и @B.


Когда вы описываете @@, как ближнюю метку, используя двоеточие (:), то определяете уникальный идентификатор вида @@xxxx (где xxxx - это шестнадцатиричное число). @B ссылается на последний определенный таким образом идентификатор. @F ссылается на следующий идентификатор с определением такого вида. Например:


version m510
@@:
jmp @B ; перейти на предыдущий идентификатор @@
jmp @F ; перейти на следующий идентификатор @@
@@:
jmp @B ; перейти на предыдущий идентификатор @@
jmp @F ; ошибка: нет следующего @@


<<<  Назад
 1  2 


 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь