Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Директивы определения данных

Читайте также:
  1. А. Создание и заполнение базы данных
  2. Автоматизация ввода данных
  3. Алгоритм определения премиальных баллов
  4. АНАЛИЗ ИСХОДНЫХ ДАННЫХ
  5. Анализ основных путей получения данных консультантом для анализа сложившейся ситуации в компании клиента.
  6. Анализ эмпирических данных
  7. Аналитическая обработка данных, системы оперативной аналитической обработки (ОLAP).

Используются для идентификации переменных и полей памяти. Формат дирек­тивы

[имя] D* выражение [.выражение] [.................................................................................... ].

D* может быть:

a DB (define byte) — определить байт (1 байт);

Q DW (define word) — определить слово (2 байт);

a DD (define dword) — определить двойное слово (4 байт);

a DQ(define 8 byte) — определить8байт;

Q DT (define 10 byte) — определить 10 байт.

Рассматриваемые директивы определяют переменную (имя) или присваивают полям (ячейкам) памяти начальные значения; резервируют в памяти один или несколько байт — DB, слов — DW, двойных слов — DD и т. д. (с более поздним присвоением значения).

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

- константой: const DB 56; const DW 1936; const DD 3FFH. Обязательно следует учитывать диапазон и вместимость байта, слова и т. д.; так, для DB константа не может быть больше 255, для DW - 65535, для DD - (65535)Л2=4294836225;

- вектором или таблицей: tab!el DB 30,4,-15,0,0,0,56; table2 DW 1936,3004,56,15. В одном псевдооператоре можно поместить строку до 132 позиций, причем вместо повторения одного и того же значения несколько раз (0 в tablet) можно использо­вать псевдооператорDUP(duplicate— дублировать):tab!el DB 30,4,-15,3 dup(0),56);

- строкой символов: strl DB 'Вы ввели слишком большое число1; str2 DB 'Bad command1; в псевдооператоре DB строка может содержать 255 символов, во всех остальных (DW. DD, DQ, DT) — только два символа.

- пустым полем: polel DB?; pole2 DW 12 dup(?), при этом в элементы резервируе­мой памяти ничего не записывается (записывается не 0, как, например, в ди­рективе ро!еЗ DW 5 dup(0), а просто резервируются ячейки памяти);

- символическим именем переменной: varl DW dlsp; var2 DD vector (одна пере­менная определяется адресом другой, в директивах указывать offset не надо, ибо имя переменной воспринимается как ее адрес). Такой вариант может использоваться, например, для хранения адресов ячеек памяти, меток, на ко­торые можно ссылаться в программе (varl DW dlsp), причем если переменная находится в том же сегменте, что и ссылающаяся команда, то достаточно в ка­честве адреса указать только смещение (2 байт), то есть обойтись DW; если же переменная находится в другом сегменте, то необходимо указать и сегмент, и смещение (всего 4 байт), то есть следует использовать уже DD (var2 DD vector);

- простым выражением: fnl DB 80*3; fn2 DW (disp)+256, вычисляемым, естествен­но, только при трансляции программы.

― Директивы определения сегментов и процедур

Сегмент определяется псевдооператорами:

имя_cer segment

имя_cer ends

В программе можно использовать четыре сегмента (по числу сегментных регист­ров) и для каждого указать соответствующий регистр сегмента псевдооператором ASSUME (assume — присвоить), например:

codeseg sedment

assume CS:codeseg, DS:dataseg, SS:stackseg

.

.

codeseg ends

В директиве Assume регистр_cer:имя_cer [...], в частности Assume cs: codeseg, указы­вается, что для сегмента имя_cer (codeseg) выбран регистр регистр__cer (CS).

После директивы Assume следует явным образом загрузить адрес начала сегмента данных в регистр DS:

mov AX, dataseg

mov DS, AX.

.Подобная же инициализация сегментных регистров CS и SS выполняется автоматически (по умолчанию). Процедура определяется псевдооператорами:

............................................................................................................................................................. имя_проц proc [far]..

..............................................................................................................................................................

..............................................................................................................................................................

............................................................................................................................................................. ret

............................................................................................................................................................. имя_проц endp

При определении процедуры после ргос должен быть указан атрибут дистанции near или far; если этого атрибута нет, то по умолчанию подразумевается near. Обыч­но процедура должна заканчиваться командой ret (return), то есть процедура яв­ляется подпрограммой. Если процедура near, то обращение к ней (call) из того же сегмента; если proc far, то из любого сегмента (в этом случае командой ret из стека при возврате будет извлечено два слова: для IP и для CS).


Дата добавления: 2015-12-07; просмотров: 91 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.007 сек.)