сегмент даних
Сегмент даних призначений для визначення констант, робочих змінних і областей вводу-виводу.
У моделі 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)