Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 24

Unknown Author

2.3.3. Директива DD

По директиве DD (define double word, определить двойное слово) описываются переменные, под которые отводятся двойные слова. Поэтому именэ. этих переменных имеют тип 4 или DWORD (значением этой стандартной константы как раз является число 4). В остальном эта директива похожа на две предыдущие.

Допустимые типы операндов этой директивы таковы.

♦ •

Операнд ?

Пример:

A DD ?

Под переменную А выделяется двойное слово, в которое ассемблер ничего не записывает, т. е. переменная А не получает начального значения.

Целое число со значение от •l31 до 232-1 Пример:

В DD 123456h

В данном случае переменная В получает начальное значение, причем это значение ассемблер записывает в память в "перевернутом" виде:

Константное выражение (со значением от -215 до 216-1)

Обратите внимание на диапазон возможных значений выражения - он в два раза меньше диапазона чисел, которые можно записать в двойном слове. Дело в том, что в ЯА все выражения вычисляются в области 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 и в каких случаях полезна эта директива.

Операндимя

Если в правой части директивы указано имя регистра, переменной, константы и т. п„ тогда имя слева объявляется синонимом данного имени и все последующие вхождения в текст программы этого имени-синонима ассемблер . будет заменять на имя, указанное справа. Например: