Logo GBNhost.com — скидка на VPS сервера 50 процентов! Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Сверхбыстрый хостинг от 69 р./мес., VPS от 299 р./мес.

Бесплатно: администрирование + ISPmanager + DDoS защита + SSL + 7 дней тестовый период

Скидка 50% на первый месяц VPS и хостинга по промокоду CITFORUM

Хостинг в Европе для новичков (от 25 руб/мес) и VIP-хостинг для профессионалов (от 1000 руб/мес)

Скидка 25% на все тарифы хостинга по промокоду STDCITF

Бесплатно: тест на 30 дней!

хостинг сайтов ГиперХост — хостинг сайтов который Вы искали.

Виртуальный хостинг, Аренда VPS серверов, рация доменных имен, SSL сертификаты

Ваш идеальный сервер от 4$/мес. Все включено:

- Администрирование и решение проблем 24/7
- Перенос проектов без рисков и простоев.
- Круглосуточный мониторинг доступности сайтов.
- Защита от DDoS атак.

Глава 11. Управление областью действия идентификаторов

          В Турбо Ассемблере и большинстве других языков  программиро-
     вания идентификатор в зависимости от того, где он находится в мо-
     дуле, может   иметь   разное   значение.   Например,    некоторые
     идентификаторы могут  иметь одно и то же значение во всем модуле,
     а другие определены только для конкретной процедуры.

          Под областью действия понимается диапазон строк,  в  котором
     идентификатор имеет  определенное значение.  Для разработки прог-
     рамм, использующих принципы модульного программирования, правиль-
     ное задание  области  действия идентификатора имеет важное значе-
     ние. Управляя  областью  действия   идентификатора,   вы   можете
     управлять его использованием. Кроме того, правильный выбор облас-
     ти действия идентификатора может устранить  проблемы, возникающие
     при многократном определении идентификатора с одним и тем же име-
     нем.


Переопределяемые идентификаторы

Некоторые типы идентификаторов, которые поддерживает Турбо Ассемблер, рассматриваются как переопределяемые. Это означает, что вы можете в любом месте модуля переопределить идентификатор данного типа другим идентификатором данного типа. Этим свойством, например, обладают числовые идентификаторы: foo = 1 mov ax,foo ; поместить 1 в AX foo = 2 mov ax,foo ; поместить в AX 2 В общем случае область действия данного переопределяемого идентификатора начинается в точке его определения и продолжается до того места, в котором он переопределяется. Область действия последнего переопределения идентификатора включает в себя область от начало модуля до первого определения идентификатора. Например: mov ax,foo ; поместить 2 в AX! foo = 1 mov ax,foo ; поместить 1 в AX foo = 2 ; это определение расширяется на ; начало модуля. mov ax,foo ; поместить 2 в AX Типы переопределяемых идентификаторов перечислены в следую- щем списке: - текстовая макрокоманда; - числовое выражение; - макрокоманда из нескольких строк; - структура/объединения; - таблица; - запись; - перечисление. Примечание: Об этом подробнее рассказывается в Главе 5.

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

Ограничение области действия границами блока позволяет иден- тификатору иметь область действия, соответствующую процедуре или функции. Турбо Ассемблер поддерживает два типа области действия в границах блока: в стиле MASM и в стиле самого Турбо Ассемблера.

Директивы 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 ; ошибка: нет следующего @@
                       Назад | Содержание | Вперед

 

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

Новости мира IT:

Архив новостей

Последние комментарии:

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...