сегмент даних

Сегмент даних призначений для визначення констант, робочих змінних і областей вводу-виводу.

У моделі SMALL опис сегмента даних проводиться за допомогою спрощеної директиви сегментації. DATA.

! Зауважу. З трьох сегментних регістрів CS. DS. SS необхідно проинициализировать в програмі тільки регістр DS. Регістри CS. SS инициализирует сама операційна система, так як саме вона визначає місцеположення сегментів коду і стека і «знає», яке значення має бути записано у відповідні регістри.

Зазвичай ініціалізація сегмента DS проводиться наступними командами:

MOV DS. AX; замість ax можна использ. будь-який регістр общ.назначенія

Для опису простих типів даних в програмі використовуються спеціальні директиви резервування та ініціалізації даних. які, по суті, є вказівками транслятору на виділення певного обсягу пам'яті.

! Машинного еквівалента цим директивам немає; просто транслятор, обробляючи кожну таку директиву, виділяє необхідну кількість байт пам'яті і при необхідності ініціалізує цю область деяким значенням.

Директиви резервування та ініціалізації даних простих типів:

• db - резервування пам'яті для даних розміром 1 байт.

• dw - резервування пам'яті для даних розміром 2 байти.

• dd - резервування пам'яті для даних розміром 4 байта.

• df - резервування пам'яті для даних розміром 6 байт;

• dp - резервування пам'яті для даних розміром 6 байт.

• dq - резервування пам'яті для даних розміром 8 байт.

• dt - резервування пам'яті для даних розміром 10 байт.

Формат цих директив:

[<имя>] Dx <выражение>

Вираз може бути

1) константою, Perem 1 DB 100

Massiv DW 0,0,0,0,0; 5 елементів. Кожен по 2 б.

3) ланцюжком символів, закл. в лапки

Message DB 'Результат виконання програми -'

4) символічним ім'ям (з поля <имя> цієї або іншої директиви)

perem2 dd 0f54d567ah

adr_full dd perem2

5) знаком. наприклад, Pole db.

Чи означає резервування пам'яті без ініціалізації (привласнення поч. Знач.)

Зауважу. У пам'яті цей байт буде 00h.

6) Для повторення операндів можна використовувати директиву DUP

(Duplicate - повторювати, дублювати)

Massiv1 dw 5 DUP (0)

Massiv2 db 10 DUP (0), 10 DUP (1)

Massiv3 db 3 DUP (0), 1,1

Massiv4 db 100 DUP (?)

Stroka db 10 DUP ( '')

У сегменті даних поряд з директивами резервування та ініціалізації даних можуть використовуватися псевдооператориEQU і = (директиви визначення ідентифікаторів). Їх можна віднести до простих макросредств асемблера.

З їх допомогою можна визначати символічні імена або ідентифікатори часто використовуваних виразів. Під час трансляції замість цих імен макроассемблер підставить відповідні значення. У разі необхідності це дозволяє вносити в програму мінімум змін.

Синтаксис псевдооператор EQU (equete -пріравнівать).

<имя> EQU <строка или числовое выражение>

<имя> = <числовое выражение>

1. За допомогою EQU імені можна ставити у відповідність як числові вирази, так і текстові рядки, а псевдооператор = може використовуватися тільки з числовими виразами.

2. Ідентифікатори, визначені за допомогою =, можна перевизначати в тексті програми, а визначені за допомогою EQU - не можна.

Зауваження. Щоб рядок сприймалася як текстова, а не як вираз, її необхідно укласти в кутові дужки <строка>. У режимі Ideal рядок для EQU завжди трактується як текстова.

Ak equ ax; перейменували регістр

Порада. Псевдооператор = зручно використовувати для визначення простих абсолютних (тобто не залежать від місця завантаження програми в пам'ять) математичних виразів.

Наприклад, adr 1 db 10 dup (0)