Директивы выделения памяти
Код директивы определяет тип данного, для которого выделяется память.
В табл. 4.1 определены директивы для выделения памяти и соответствующие типы данных для языка С.
Таблица 4.1. Директивы выделения памяти
Код директивы | Размер данного (байт) | Тип соответствующего данного в языке С | |||
DB
| 1 | char | |||
DW | 2 | short | |||
DD | 4 | int, unsigned, float | |||
DF, DP | 6 | - | |||
DQ | 8 | double, int64 | |||
DT | 10 | long double |
При выделении памяти допускается инициализировать выделенную область и не инициализировать ее. Для правильной работы программы первая переменная в сегменте данных DATASEG должна быть инициализирована. Если переменная инициализируется, в поле операнда задается ее значение, если не инициализируется, ставится знак ? вместо соответствующего значения. Одной переменной может соответствовать несколько значений (массив). Среди элементов массива могут быть инициализированные и неинициализированные элементы. Под адрес всегда отводится 4 байта (данное типа DD). Для инициализации адреса достаточно в поле операнда задать имя данного, для которого определяется адрес.
Примеры директив.
Оттранслировать директивы с языка С++ на ассемблер, если память выделяется в сегменте данных:
char c1 = ‘a’, c2, c3 = «bcde»;
short s1 = 2, s2[] = {1,2,3};
unsigned short s2 = 60000;
int i1[]={7, 3, -2, 4};
float f1 = 5, f2;
double d1 = 5, d2, d3 = 7e-20;
long double ld1 = 3, ld2[5];
int *p = i1, *q;
DATASEG
;char c1 = ‘a’, c2, c3 = «bcd»;
c1 db ‘a’
c2 db ?
c3 db «bcd», 0
;short s1 = 2, s2[] = {1,2,3};
s1 dw 2
s2 dw 1, 2, 3
;unsigned short s3 = 60000;
s3 dw 60000
; int i1[]={7, 3, -2, 4};
i1 dd 7, 3, -2, 4
;float f1 = 5, f2;
f1 dd 5.;
f2 dd ?
;double d1 = 5, d2, d3 = 7e-20;
d1 dq 5.;
d2 dq ?
d3 dq 7e-20
; long double ld1 = 3, ld2[5];
ld1 dt 3.;
ld2 dt 5 dup (?)
;int *p = i1, *q;
p dd i1
q dd ?
Обратите внимание на задание адресов!
Заметим, что директивы для выделения памяти под c1 .. d3 лучше поменять местами, так как в этом случае доступ к переменным выполняется быстрее с учетом выравнивания адресов.