adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
what's up doc?
В качестве значения в директивах DD, DQ и DT можно указывать
числа с плавающей точкой. Приведем некоторые примеры таких чисел:
1.0E30 ; означает 1.0x10^30
2.56E-21 ; означает 2.56х10^E-21
1.28E+5 ; означает 1.28х10^+5
0.025 ; означает .025
Турбо Ассемблер распознает эти числа с плавающей точкой,
поскольку они содержат после начальной цифры символ точки. В MASM
эти правила могут быть ослаблены, например:
DD 1E30 ; допустимое значение с плавающей точкой в
; режиме MASM
DD .123 ; допустимо только в режиме MASM
Примечание: Для ясности вы рекомендуем всегда исполь-
зовать начальную цифру и десятичную точку.
Турбо Ассемблер допускает также указывать в директивах DD,
DQ и DT кодированные вещественные числа. Кодированное веществен-
ное число - это шестнадцатиричное число точно определенной длины.
Суффикс R указывает, что число будет интерпретироваться, как ко-
дированное вещественное число. Длина числа должна заполнять тре-
буемое поле (плюс одна цифра, если начальной цифрой является 0.
Например:
DD 12345678r ; допустимое число
DD 012345678r ; допустимое число
DD 1234567r ; недопустимое число (слишком
; короткое)
Другие значения суффиксов (D, H, O, B) действуют аналогично
тем, которые указываются в обычных выражениях.
Некоторые простые директивы определения данных интерпретиру-
ют другие числовые константы особым образом. Например, если вы не
задаете основания для значения в директиве DT, то Турбо Ассемблер
использует двоично-десятичное представление (BCD). Другие дирек-
тивы предполагают десятичное значение:
DD 1234 ; десятичное
DT 1234 ; BCD
Если значение представляет собой простую положительную или
отрицательную константу, используемое по умолчанию основание (за-
даваемое директивой RADIX) не применяется в директивах DD, DQ и
DT. Например:
Турбо Ассемблер 3.0/tasm/#1-2 = 202 =
RADIX 16
DW 1234 ; шестнадцатиричное значение 1234
DD 1234 ; десятичное значение 1234
Примечание: Числовые константы и директива RADIX под-
робнее описываются в Главе 5.
Создание экземпляра структуры или объединения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Чтобы создать экземпляр типа данных, представляющего собой
структуру или объединения, используйте в качестве директивы опре-
деления данных имя структуры или объединения. Предположим, нап-
ример, что вы определили следующее:
ASTRUC STRUC
B DB "xyz"
C DW 1
D DD 2
ASTRUC ENDS
BUNION UNION
X DW ?
Y DD ?
Z DB ?
BUNION ENDS
Тогда операторы:
ATEST ASTRUC ?
BTEST BUNUION ?
будут создавать экземпляры структуры astruc (определяя переменную
atest) и объединения bunion (определяя переменную btest). Пос-
кольку в примере указывается значение неинициализированных данных
?, то начальные данные в текущий сегмент не вводятся.
Турбо Ассемблер 3.0/tasm/#1-2 = 203 =
Инициализация экземпляра структуры или объединения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Инициализированные экземпляры структуры несколько более
сложны, чем неинициализированные. Когда вы определяете структуру,
вам нужно определить используемое по умолчанию начальное значение
для каждого ее элемента. (В качестве начального значения можно
использовать ключевое слово ?, которое указывает, что конкретного
начального значения сохранять не следует.) Когда вы создаете эк-
земпляр структуры, его можно создать с использованием значений по
умолчанию или переопределяемых значений. Простейший инициализиро-
ванный экземпляр структуры содержит просто заданные в определении
начальные значения. Например:
ASTRUC {}
что эквивалентно следующему:
DB "xyz"
DW 1
DD 2
Фигурные скобки ({}) представляет нулевой инициализатор для
структуры. Значение-инициализатор определяет, что элементы (если
они имеются) должны иметь начальные значения, которые следует пе-
реопределить, и какими новыми значениями, если вы выделяете дан-
ные для экземпляра структуры. Инициализатор в виде фигурных ско-
бок имеет следующий синтаксис:
{ [имя_элемента = значение [,имя_элемента...]] }
где "имя_элемента" - это имя элемента структуры или объединения,
а "значение" - это то значение, которое вы хотите присвоить эле-
менту в данном экземпляре. Чтобы указать Турбо Ассемблеру, что
для элемента нужно использовать начальное значение из определения
структуры или объединения, задайте нулевое значение. Значение ?
показывает, что этот элемент инициализировать не нужно. Турбо Ас-
семблер присваивает всем элементам, которые не указываются в ини-
циализаторе, начальное значение из определения структуры или объ-
единения, например:
ASTRUC {C=2,D=?}
эквивалентно следующему:
DB "xyz"
DW 2
DD ?
Вы можете использовать инициализатор в виде фигурных скобок
для задания значения любого элемента структуры или объединения,
даже если он находится во вложенной структуре или объединении.
Турбо Ассемблер 3.0/tasm/#1-2 = 204 =
Объединения отличаются от структур, поскольку элементы в
объединении перекрывают друг друга. Будьте аккуратны, когда вы
инициализируете экземпляр структуры, поскольку если несколько
элементов перекрывают друг друга, Турбо Ассемблер допускает, что-
бы в экземпляре только один элемент имел инициализирующее значе-
ние. Например:
BUNION {}
допустимо, поскольку все три элемента в определении объединения
являются неинициализированными. Данный оператор эквивалентен сле-
дующему:
BD 4 DUP (?)
В данном примере 4 байта зарезервированы, поскольку размер
объединения равен размеру его наибольшего элемента (в данном слу-
чае DWORD). Если инициализированный элемент объединения не явля-
ется наибольшим элементом объединения, то Турбо Ассемблер воспол-
няет разницу, резервируя место, но не генерируя данные, например:
BUNION {Z=1}
эквивалентно следующему:
DB 1
DB 3 DUP (?)
Наконец, несколько инициализированных элементов объединения
приведут к ошибке. Следующее, например, не допускается:
BUNION {X=1,Z=2}
Заметим, что если два или более поля объединения имеют на-
чальные значения в определении объединения, то использование
простого инициализатора в виде фигурных скобок также приведет к
ошибке. Чтобы генерировался допустимый экземпляр, инициализатор
должен устанавливать только одно значение ?.
Альтернативным методом инициализации структуры или объедине-
ния является использование инициализатора в виде угловых скобок
(<>). Значения такого инициализатора являются неименованными, но
располагаются в том же порядке, что и соответствующие элементы в
определении структуры или объединения. Для этого инициализатора
используется следующий синтаксис:
< [значение [,значение...]] >
|
adfun.ru
|
|
|
|