В этом случае ассемблер записывает в слово, выделенное под переменнуюD,адрес переменной С, который становится начальным значением переменной
В правой части директивы DW можно указать любоечисло операндов, атакжеконструкцию повторения.
Возможный пример:
Е DW 40000, 3 DUP(?)
По директиве DD (define double word, определить двойное слово) описываются переменные, под которые отводятся двойныеслова. Поэтому имена этих переменных имеют тип 4 или DWORD (значением этой стандартной константы как раз является число 4).
В остальном эта директива похожа на двепредыдущие.
Допустимые типы операндов этой директивы таковы.
Операнд ?
Пример:
А DD ?
Под переменную Авыделяется двойноеслово, в которое ассемблер ничегоне записывает, т. е. переменная А неполучает начального значения.
Целое число со значением от-231 до 232-1
Пример:
В данном случае переменная Вполучает начальное значение, причем это значение ассемблер записывает в память в "перевернутом" виде:
B
от -215 до 216-1)
Обратите внимание на диапазон возможных значений выражения - он в два раза меньше диапазона чисел, которые можно записать в двойном слове.
Дело в том, что в ЯА все выражения вычисляются в области 16-битовых чисел, т. е. результаты всех операций берутся по модулю 216 (10000h).
Поэтому построить выражение, значением которого являлось бы 32-битовое или даже 17-битовое число, неудастся.
Единственное исключение - это явно задать в директиве DD"большое" число. Если же мы укажем хотя бы одну операцию, то ответ тут же будет взят помодулю 216.
Например, по директиве
X DD 8000h+8002h
начальным значением переменной Хстанет число 2, а не число 10002h.
Конечно, такая особенность задания начальных значений для переменных размером в двойноеслово неочень-то приятна, но такуж устроен ЯА, и это надо учитывать.
Такой операнд задает абсолютный адрес.
Как это делается, будет рассмотрено позже, в гл. 7.