Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 24
Unknown Author
2.3.3. Директива DD
По директиве DD (define double word, определить двойное слово) описываются переменные, под которые отводятся двойные слова. Поэтому именэ. этих переменных имеют тип 4 или DWORD (значением этой стандартной константы как раз является число 4). В остальном эта директива похожа на две предыдущие.
Допустимые типы операндов этой директивы таковы.
♦ •
Пример:
A DD ?
Под переменную А выделяется двойное слово, в которое ассемблер ничего не записывает, т. е. переменная А не получает начального значения.
В DD 123456h
В данном случае переменная В получает начальное значение, причем это значение ассемблер записывает в память в "перевернутом" виде:
Обратите внимание на диапазон возможных значений выражения - он в два раза меньше диапазона чисел, которые можно записать в двойном слове. Дело в том, что в ЯА все выражения вычисляются в области 16-битовых чисел, т. е. результаты всех операций берутся по модулю 216 (lOOOOh). Поэтому построить выражение, значением которого являлось бы 32-битовое или даже 17-битовое число, не удастся. Единственное исключение - это явно задать в директиве DD "большое" число. Если же мы укажем хотя бы одну операцию, то ответ тут же будет взят по модулю 216. Например, по директиве
X DD 8000h+8002h
начальным значением переменной X станет число 2, а не число 10002h.
Конечно, такая особенность задания начальных значений для переменных размером в двойное слово не очень-то приятна, но так уж устроен ЯА, и это надо учитывать.
Такой операнд задает абсолютный адрес. Как это делается, будет рассмотрено позже, в гл. 7.
DW 33 DUP(?)/ 12345h
2.4. Директивы эквивалентности и присваивания
Мы рассмотрели, как в ЯА описываются переменные. Теперь рассмотрим, как в этом языке описываются константы. Это делается с помощью директивы эквивалентности - директивы EQU (equal, равно), имеющей следующий синтаксис:
<имя> EQU <операнд>
Здесь обязательно должно быть указано имя, должен быть и операнд, причем только один.
Эта директива аналогична описанию константы в языке Паскаль: const <имя> = <операнд>;
Директивой EQU автор программы заявляет, что указанному операнду он дает указанное имя, и требует, чтобы все вхождения этого имени в текст программы ассемблер заменял на этот операнд. Например, если есть директива
STAR EQU
то ассемблер будет рассматривать предложение
Т DB STAR
как предложение
Т DB
Другими словами, указать имя STAR и указать - это одно и то же.
Отметим, что директива EQU носит чисто информационный характер, по ней ассемблер ничего не записывает в машинную программу. Поэтому директиву EQU можно ставить в любое место программы - и между командами, и между описаниями переменных, и в других местах.
Теперь рассмотрим, каким может быть операнд директивы EQU и в каких случаях полезна эта директива.
Если в правой части директивы указано имя регистра, переменной, константы и т. п„ тогда имя слева объявляется синонимом данного имени и все последующие вхождения в текст программы этого имени-синонима ассемблер . будет заменять на имя, указанное справа. Например: