Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
89
Добавлен:
03.06.2014
Размер:
1.76 Mб
Скачать

1. Директивы задания данных

1.1. Директивы определения имен

а) идентификатор EQU выражение

Позволяет символически именовать константы в программе.

Например

N EQU 100h

TABLE EQU DS:[BP][SI]

MINS_DAY EQU 60*24

b)идентификатор = выражение

Позволяет символически именовать переопределяемые в программе константы. Используется только для числовых выражений.

1.2. Директивы выделения памяти

Имеет формат:

идентификатор D* список значений

Здесь D* - одна из приведенных ниже директив:

DB– выделить байты;

DW– выделить слова;

DD– выделить двойные слова;

DF– выделить блоки по шесть байт;

DQ– выделить учетверенные слова;

DT– выделить блоки по десять байт.

Данная директива позволяет зарезервировать в памяти блоки заданного размера и присвоить им, если требуется, определенные значения, заданные в списке. Например:

text_string db ‘Hello world’ ; выделяет 11 байт и заполняет их кодами символов

b_max db 255 ; выделяет 1 байт и записывает в него число 255

b_min db -128 ; выделяет 1 байт и записывает в него число –128

rez_w dw ? ; выделяет 1 слово и не заполняет его (обычно ; используется в программе для записи результата)

rez_tab dw 20dup(?) ; выделяет 20 слов, но не заполняет их данными

b_tab db 4dup(?),8,5,4dup(1); выделяет 10 байт: 4 не заполняются, затем

; записываются числа 8, 5 и четыре раза по 1

fl_num dd 5.03E-2 ; выделяется двойное слово и в него записывается

; число с плавающей запятой 5.0Е-2.

2. Директивы сегментации программы

Два способа задания сегментов в программе.

Полное описание сегментов

имя_сегмента SEGMENT атрибуты

тело сегмента

имя_сегмента ENDS

Пример

dat_s1 segment byte public ‘data’

a db ?

dat_s1 ends

Атрибуты:

  • ReadOnly– сегмент доступен только для чтения; при попытки записи в этот сегментMASMвыдаст сообщение об ошибке.

  • Атрибут выравнивания – указывает ассемблеру и компоновщику, с какого адреса может начинаться сегмент.

BYTE– с любого адреса.

WORD– с четного адреса.

DWORD– с адреса, кратного 4.

PARA– с адреса, кратного 16 (установлен по умолчанию).

PAGE– с адреса, кратного 256.

  • Атрибут группирования, комбинирования.

PUBLIC- конкатенация (присоединение частей сегментов друг к другу).

COMMON– размещение сегментов данного класса с одного адреса (для сегментов кода и оверлейных программ).

PRIVATE– сегмент с таким атрибутом не объединяется с другими сегментами (значение по умолчанию).

  • Атрибут типа данных.

USE16 – сегмент работает с 16-битными данными.

USE32 – сегмент работает с 32-битными данными.

  • Атрибут класса – это любая метка, взятая в одинарные кавычки. Этот атрибут влияет на расположение сегментов в скомпонованной программе.

Связь сегментов с соответствующими сегментным регистром.

ASSUME{регистр_сегментный: имя_сегмента,…}

Обычно эта директива идет вслед за сегментом кода.

Пример

assume cs: code_s, ds: d_seg,

ss: stack, es: nothing

NOTHING– не устанавливать связь или отменить ее, если она была установлена.

Загрузка начальных адресов сегментов в соответствующие регистры.

movax,segd_seg;seg- необязательный оператор

movds,ax