И н и ц и а л и з а ц и я

и

о п и с а н и е

д а н н ы х

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

Данные могут размещаться в участках памяти, которые называются сегменты. Обычно это или сегмент данных, или сегмент кода. Сегменты описываются с помощью директивы SEGMENT или с помощью упрощенных директив .Model, .Code или .Data.

Для инициализации простых типов данных в Ассемблере используются специальные директивы Dx, являющиеся указаниями компилятору на выделение определенных объемов памяти. Для языка Ассемблера имеет значение только длина ячейки, в которой размещено данное, а какое это данное — зависит всецело от человека, пишущего программу его обработки.

Длина(бит) Директива Описание
8 DB BYTE - резервирование памяти для данных размером 1 байт.
Директивой db можно задавать следующие значения:
  • выражение или константу, принимающую значение из диапазона:
    • для чисел со знаком –128...+127;
    • для чисел без знака 0...255;
  • символьную строку из одного или более символов. Строка заключается в кавычки. В этом случае определяется столько байт, сколько символов в строке.
16 DW WORD - резервирование памяти для данных размером 2 байта.
Директивой dw можно задавать следующие значения:
  • выражение или константу, принимающую значение из диапазона:
    • для чисел со знаком –32 768...32 767;
    • для чисел без знака 0...65 535;
  • 1- или 2-байтовую строку, заключенная в кавычки.
32 DD DWORD - резервирование памяти для данных размером 4 байта.
Директивой dd можно задавать следующие значения:
  • выражение или константу, принимающую значение из диапазона:
    • для i8086:
      • для чисел со знаком –32 768...+32 767;
      • для чисел без знака 0...65 535;
    • для i386 и выше:
      • для чисел со знаком –2 147 483 648 ... +2 147 483 647;
      • для чисел без знака 0...4 294 967 295;
  • строку длиной до 4 символов, заключенную в кавычки.
64 DQ QWORD - резервирование памяти для данных размером 8 байт.
Директивой dq можно задавать следующие значения:
  • выражение или константу, принимающую значение из диапазона:
    • для МП i8086:
      • для чисел со знаком –32 768...+32 767;
      • для чисел без знака 0...65 535;
    • для МП i386 и выше:
      • для чисел со знаком –2 147 483 648 ... +2 147 483 647;
      • для чисел без знака 0...4 294 967 295;
  • константу со знаком из диапазона –263...263–1;
  • константу без знака из диапазона 0...264–1;
  • строку длиной до 8 байт, заключенную в кавычки.
80 DT TWORD - резервирование памяти для данных размером 10 байт.
Директивой dt можно задавать следующие значения:
  • выражение или константу, принимающую значение из диапазона:
    • для МП i8086:
      • для чисел со знаком –32 768...+32 767;
      • для чисел без знака 0...65 535;
    • для МП i386 и выше:
      • для чисел со знаком –2 147 483 648 ... +2 147 483 647;
      • для чисел без знака 0...4 294 967 295;
  • константу со знаком из диапазона –279...279-1;
  • константу без знака из диапазона 0...280-1;
  • строку длиной до 10 байт, заключенную в кавычки;
  • упакованную десятичную константу в диапазоне 0 ... 99 999 999 999 999 999 999.

Для директив инициализации данных имя может быть, а может и отсутствовать. Если имя есть, с ним связывается адрес памяти, и в дальнейшем в командах мы можем использовать это имя по своему усмотрению. Например, заносить по указанному именному адресу какое-то значение или извлекать из него хранимое значение.

Регистр букв для имен и директив в Ассемблере безразличен.

Но при стыковке программ на Ассемблере с программами на языке C/C++ регистр для имен переменных имеет ОЧЕНЬ большое значение.

Если переменная не инициализируется, то в поле операнда директивы Dx нужно поставить ? - знак вопроса.
А если нужно выделить непрерывный участок памяти из нескольких ячеек, пишется параметр коэффициента повторений dup.

Pascal C/C++ Assembler
N: Integer; Int N;                       //Win 16
                                        //Win 32
N dw ?
N dd ?
A: Single; float A; A dd ?
B: Double;
...
B:=-678.543;
double B=-678.543; B DQ -678.543
Arr: array[1 .. 100] of extended;
long double Arr[100]; Arr DT 100dup(?)
Mas Q: array[1 .. 10] of byte;
Mas[1]:=1;
Mas[2]:=2;
...
Mas[10]:=10;
unsigned char MasQ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; MasQ DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Mas W: array[1 .. 10] of word;
Mas[1]:=0;
Mas[2]:=0;
...
Mas[10]:=0;
unsigned short int MasW={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; MasW DW 10 dup(0)


Лабораторная работа №1

Программирование на Машинно-Ориентированных Языках.
Преподаватель: Коробов С.А.