Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ по Асм №1.doc
Скачиваний:
12
Добавлен:
06.02.2016
Размер:
313.86 Кб
Скачать

1.6.2. Директива dw

Директивой DW (defineword, определить слово) описываются переменные размером в слово. Она аналогична директиве DB, поэтому далее вкратце опишем ее использование.

Операнд ?

Пример:А DW ? (создается переменная А размером в слово).

В ЯА есть стандартная константа с именем Wordи значением 2. Поэтому Type A=Word=2.

Константное выражение со значением от –32768 до 65535

Пример : B DW 1234h

C DW -2

Как и в случае директивы DB, не отрицательные числа записываются в память как числа без знака, а отрицательные числа – в дополнительном коде.

В частном случае рассматриваемого вида операнды директивы DW может быть строка из одного или двух символов,

Например:

S1 DW ‘01’ или S2 DW ‘1’

Если указана строка из двух символов, тогда ЯА берет коды указанных символов (код ‘0’ – 30h и код ‘1’ – 31h) и образует из них число-слово (3031h). Если же указан один символ, тогда к нему слева приписывается символ с кодом 0, то есть S2 будет содержать начальное значение 0031h.

Несколько операндов, конструкция повторения.

В правой части директивы DW можно указать любое число операндов, а также конструкцию повторения.

Например:E DW 40000, 3 DUP (?)

1.6.3. Директива dd

По этой директиве (definedoubleword) описываются переменные, под которые отводятся двойные слова. Поэтому имена этих переменных имеют тип 4 илиDWord. В остальном эта директива похожа на DB и DW.

Операнд ?

Пример:A DD ?

Целое число со значением от – 231 до 232 - 1

Пример:B DD 123456h.

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

Причина такого диапазона чисел в том, что в ЯА все выражения вычисляются в области 16-битовых чисел, то есть результаты всех операций берутся по модулю 216(10000h). Поэтому построить выражение, значением которого является 32-битовое или даже 17-битовое число, не удастся. Единственное исключение – это явно задать в директиве DD “большое” число. Если же мы укажем хотя бы одну операцию, то ответ тут же будет взят по модулю 216.

Например:

по директиве X D 8000h+8002h

Начальным значением переменной Х станет число 2, а не число 10002h.

Несколько операндов, конструкция повторения.

Например: X DW 33 DUP (?) , 123456h.

1.6.4. Директивы эквивалентности и присваивания

Директива EQU (equal, равно) применяется в ЯА для описания констант.

Синтаксис:<имя> EQU <операнд>

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

Например, эти директивы эквивалентны:

A EQU ‘*’ T DB ‘*’

T DB A

Рассмотрим возможные операнды директивы EQU.

Операнд-имя

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

Например: A DW ?

B EQU A

C DW B ; эквивалентно C DW A

Имена-синонимы используются для наглядных обозначений. Например, как имя-синоним регистра.

Операнд - константное выражение

Примеры: N EQU 100

K EQU 2*N-1

B EQU ‘*’

В этом случае значением константы объявляется значение выражения, на которое оно будет заменяться при компиляции.

Если в константном выражении используется имена других констант, то они должны быть описаны выше данной директивы EQU.

Операнд - любой другой текст

Пример:S EQU ‘Вы ошиблись’

LX EQU X+(N-1)

В данном случае считается, что указанное имя обозначает операнд в том виде, как он записан (операнд не вычисляется). Именно на этот текст будет замещаться каждое вхождение данного имени в программу.

Например, следующие предложения эквивалентны:

ANS DB S, ‘!’ ANS DB ‘Вы ошиблись’, ‘!’

NEG LX NEG X+(N-1)

Еще одна директива ЯА, похожая на EQU

Директива присваивания:

<имя>=<константное выражение>.

Это выражение определяет константу с именем, указанным в левой части, и числовымзначением, равным значению выражения справа. В отличие от констант, описанных по директиве EQU, данная константа может менять свое значение, обозначая в разных частях текста программы разные числа.

Например:

K=10

A DW K ;  A DW 10

K=K+4

B DW K ; B DW 14

По окончании – 2 характерных примера:

K=1

N EQU K

A DW N ; A=1

K=2

B DW N ; B=2

K=1

N EQU K+10

C DW N ; C=11

K=2

D DW N ; D=11

Имя N – синоним K, поэтому

А DW N эквивалентно

A DW K

В этом случае N сразу вычислится и не будет зависеть от К