adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
ное задание области действия идентификатора имеет важное значе-
ние. Управляя областью действия идентификатора, вы можете
управлять его использованием. Кроме того, правильный выбор облас-
ти действия идентификатора может устранить проблемы, возникающие
при многократном определении идентификатора с одним и тем же име-
нем.
Переопределяемые идентификаторы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Некоторые типы идентификаторов, которые поддерживает Турбо
Ассемблер, рассматриваются как переопределяемые. Это означает,
что вы можете в любом месте модуля переопределить идентификатор
данного типа другим идентификатором данного типа. Этим свойством,
например, обладают числовые идентификаторы:
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
Типы переопределяемых идентификаторов перечислены в следую-
щем списке:
- текстовая макрокоманда;
- числовое выражение;
Турбо Ассемблер 3.0/tasm/#1-2 = 194 =
- макрокоманда из нескольких строк;
- структура/объединения;
- таблица;
- запись;
- перечисление.
Примечание: Об этом подробнее рассказывается в Главе
5.
Область действия в границах блока
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Ограничение области действия границами блока позволяет иден-
тификатору иметь область действия, соответствующую процедуре или
функции. Турбо Ассемблер поддерживает два типа области действия в
границах блока: в стиле MASM и в стиле самого Турбо Ассемблера.
Турбо Ассемблер 3.0/tasm/#1-2 = 195 =
Директивы 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, определенные с помощью
Турбо Ассемблер 3.0/tasm/#1-2 = 196 =
директивы двоеточия (:), если они находятся в процедуре, и если
вы выбрали в директиве 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 ; ошибка: нет следующего @@
Турбо Ассемблер 3.0/tasm/#1-2 = 197 =
Глава 12. Определение данных
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Директивы определения данных используются для выделения байт
в сегменте. Вы можете также использовать их для заполнения этих
байт начальными данными и определения переменных данных.
Все директивы определения данных имеют некоторые общие
средства. Во первых они могут генерировать инициализированные
данные и резервировать место для неинициализированных данных. Для
инициализированных данных определяется некоторое начальное значе-
ние. Неинициализированные данные определяются без задания началь-
ного значения (говорят, что их начальное значение является неоп-
ределенным). В директивах определения данных неинициализированные
данные указываются с помощью символа ?. Все прочее должно предс-
тавлять значение инициализированных данных. О том, как следует
различать инициализированные и неинициализированные данные, расс-
казывается в Главе 7.
Другим средством, которое применяется во всех директивах
определения данных, является использование для указания повторе-
ния блока данных ключевого слова DUP. Приведем общий синтаксис
всех директив распределения данных:
[имя_директивы [выражение_dup [выражение_dup...]]
|
adfun.ru
|
|
|
|