Все данные, используемые в программах на ассемблере, обязательно должны быть объявлены. Директива объявления данных имеет следующий формат:
[Имя] Директива [Константа DUP (] Список инициализаторов [)]
где Имя – символическое имя поля данных, которое может не присваиваться;
Директива – команда, объявляющая тип описываемых данных (см. таблицу 3);
Таблица 3 – Директивы определения данных
Директива
Описание типа данных
BYTE
8-разрядное целое без знака
SBYTE
8-разрядное целое со знаком
WORD
16-разрядное целое без знака или ближний указатель реального режима
SWORD
16-разрядное целое со знаком
DWORD
32-разрядное целое без знака, дальний указатель реального режима или ближний указатель защищенного режима
SDWORD
32-разрядное целое со знаком
FWORD
48-разрядное целое или дальний указатель защищенного режима
QWORD
64-разрядное целое
TBYTE
80-разрядное целое
Real4
32-х разрядное короткое вещественное
Real8
64-х разрядное длинное вещественное
Real10
80-ти разрядное расширенное вещественное
Примечание – В качестве директив также могут использоваться:
· DB –определить байт,
· DW –определить слово,
· DD –определить двойное слово (4 байта),
· DQ –определить четыре слова (8 байт),
· DT –определить пять слов (10 байт),
однако при их применении знаковые и беззнаковые, целые и вещественные типы не различаются, поэтому директивы считаются устаревшими, хотя реальный контроль типов данных в ассемблере в настоящее время не реализован.
Константа DUP – используется при описании повторяющихся данных, тогда константа определяет количество повторений;
Список инициализаторов – последовательность инициализирующих констант, указанных через запятую, или символ «?», если инициализирующее значение не определяется.
В качестве инициализирующих констант при описании данных применяются:
· целые константы формата
[Знак]Целое[Основание системы счисления],
например:
-43236, 236d – целые десятичные числа (применяется по умолчанию),
23h, 0ADh – целые шестнадцатеричные числа (если шестнадцатеричная константа начинается с буквы, то перед ней указывается 0),
0111010b – целое двоичное число;
· вещественные константы формата
[Знак] Целое [. [Целое]] [E|e [Знак] Целое],
например: -2.1, 34E-28;
· символы в кодировке ASCII (MS DOS) или ANSI (Windows) в апострофах «'» или кавычках «²», например: 'A' или ²A², при этом использование апострофов и кавычек в ассемблере эквивалентно;
· строковые константы в апострофах или кавычках, например, 'ABCD' или ²ABCD².
Примеры.
a db 23; записать в байт число 23 и присвоить этому байту имя а
db ?; зарезервировать 1 байт памяти, доступ по адресу a+1
dw 1234H ; записать в слово шестнадцатеричное число 1234, доступ по адресу a+2
Примечание – При записи данных размером более 1 байта в память младший байт записывается в поле с меньшим адресом, затем следует байт перед младшим и т.д. до старшего. Например, в предыдущем примере, если запись выполнялась по адресу 100, то по адресу 100 будет записано 34H, а по адресу 101 – 12H.
db 31 dup (1,2,3,4,5); определить 31 байт: 1, 2, 3, 4, 5, 1, 2, 3,...
val1 BYTE 255; записать в байт число 25510 = 111111112 и назвать vall
lue3 SWORD -128; записать в слово число -128 и назвать lue3
alu BYTE 10 dup ?; зарезервировать 10 байт и назвать alu
BYTE 10h; записать в байт шестнадцатеричное число 1016 = 1610
v5 BYTE 100101B; записать в байт двоичное числои назвать v5
BYTE 23,23h,0ch; записать в байт каждое из указанных чисел
sdk BYTE ²Hello²,0; записать в память строку, потом 0 и назвать sdk
SWORD -32767; записать в слово заданное число
DWORD 12345678h; записать в двойное слово шестнадцатеричное число