Директивы определения данных
Ассемблер обеспечивает два способа определения данных: во-первых,
через указание длины данных и, во-вторых, по их cодержимому. Рассмотрим
основной формат определения данных:
[имя] Dn выражение
Имя элемента данных не обязательно (это указывается квадратными
скобками), но если в программе имеются ссылки на некоторый элемент,
то это делается посредством имени.
Для определения элементов данных имеются следующие директивы: DB
(байт), DW (слово), DD (двойное слово), DQ (учетверенное слово) и DT
(десять байт).
Выражение может содержать константу, например:
FLD1 DB 25
или знак вопроса для неопределенного значения, например
FLDB DB ?
Выражение может содержать несколько констант, разделенных запятыми и
ограниченными только длиной строки:
FLD3 DB 11, 12, 13, 14, 15, 16, ...
Ассемблер определяет эти константы в виде последовательности cмежных байт.
Ссылка по имени FLD3 указывает на первую константу, 11, по FLD3+1 - на
вторую, 12. (FLD3 можно представить как FLD3+0). Например команда
MOV AL,FLD3+3
загружает в регистр AL значение 14 (шест. 0E). Выражение допускает также
повторение константы в следующем формате:
[имя] Dn число-повторений DUP (выражение) ...
Следующие три примера иллюстрируют повторение:
DW 10 DUP(?) ;Десять неопределенных слов
DB 5 DUP(14) ;Пять байт, содержащих шест.14
DB 3 DUP(4 DUP(8));Двенадцать восьмерок
В третьем примере сначала генерируется четыре копии десятичной 8
(8888), и затем это значение повторяется три раза, давая в pезультате
двенадцать восьмерок.
Выражение может содержать символьную строку или числовую константу.
Символьные строки
-------------------
Символьная строка используются для описания данных, таких как,
например, имена людей или заголовки страниц. Содержимое строки oтмечается
одиночными кавычками, например, 'PC' или двойными кавычками - "PC".
Ассемблер переводит символьные строки в объектный код в обычном формате
ASCII.
Символьная строка определяется только директивой DB, в котоpой
указывается более двух символов в нормальной последовательности слева
направо. Следовательно, директива DB представляет единственно возможный
формат для определения символьных данных.
Числовые константы
--------------------
Числовые константы используются для арифметических величин и для
aдресов памяти. Для описания константы кавычки не ставятся. Ассемблер
преобразует все числовые константы в шестнадцатеричные и записывает байты
в объектном коде в обратной последовательности - справа налево. Ниже
показаны различные числовые форматы.
Д е с я т и ч н ы й ф о р м а т. Десятичный формат допускает
десятичные цифры от 0 до 9 и обозначается последней буквой D, которую
можно не указывать, например, 125 или 125D. Несмотря на то, что ассемблер
позволяет кодирование в десятичном формате, он преобразует эти значения в
шест. объектный код. Например, десятичное число 125 преобразуется в шест.
7D.
Ш е с т н а д ц а т и р и ч н ы й ф о р м а т. Шестнадцатиричный
формат допускает шест. цифры от 0 до F и обозначается последней буквой H.
Так как ассемблер полагает, что с буквы начинаются идентификаторы, то
первой цифрой шест. константы должна быть цифра от 0 до 9. Например, 2EH
или 0FFFH, которые ассемблер преобразует соответственно в 2E и FF0F (байты
во втором примере записываются в объектный код в обратной
последовательности).
Д в о и ч н ы й ф о р м а т. Двоичный формат допускает двоичные
цифры 0 и 1 и обозначается последней буквой B. Двоичный формат обычно
используется для более четкого представления битовых значений в логических
командах AND, OR, XOR и TEST. Десятичное 12, шест. C и двоичное 1100B все
генерируют один и тот же код: шест. 0C или двоичное 0000 1100 в
зависимости от того, как вы рассматриваете содержимое байта.
В о с ь м е р и ч н ы й ф о р м а т. Восьмеричный формат допускает
восьмеричные цифры от 0 до 7 и обозначается последней буквой Q или O,
например, 253Q. На сегодня восьмеричный формат используется весьма редко.
Д е с я т и ч н ы й ф о р м а т с п л а в а ю щ е й т о ч к о й.
Этот формат поддерживается только ассемблером МASM.
При записи символьных и числовых констант следует помнить, что,
например, символьная константа, определенная как DB '12', представляет
символы ASCII и генерирует шест.3132, а числовая константа, oпределенная
как DB 12, представляет двоичное число и генерирует шест.0C.
Рис.5.1 иллюстрирует директивы для определения различных символьных
строк и числовых констант. Сегмент данных был ассемблирован для того,
чтобы показать сгенерированный объектный код (слева).
Поиск по сайту:
|