Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_1.DOC
Скачиваний:
2
Добавлен:
25.08.2019
Размер:
595.97 Кб
Скачать

3.2. Директивы распределения памяти

3.2.1. Псевдокоманды определения переменных

Псевдокоманда это такая директива ассемблера, которая приводит к включению данных или кода в программу, хотя сама она никакой ко­манде процессора не соответствует. Псевдо­команды определения пере­менных указывают ассемблеру, что в соответствующем месте програм­мы располагается переменная, определяют тип переменной (байт, слово, вещественное число и т. д.), задают ее начальное значение и ставят в со­ответствие переменной метку, которая будет использоваться для обра­щения к этим данным. Псевдокоманды определения данных записыва­ются в общем виде следующим образом:

имя_переменной d* значение где D* — одна из нижеприведенных псевдокоманд:

DB — определить байт;

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

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

DF — определить 6 байт (адрес в формате 16-битный селектор: 32-битное смещение);

DQ — определить учетверенное слово (8 байт);

DT — определить десять байт (80-битные типы данных, используемые FPU).

Поле значения может содержать одно или несколько чисел, символов строк (взятых в одиночные или двойные кавычки), операторов «?» и операторов DUP, разделенных запятыми. Все заданные таким образом данные окажутся в выходном файле, а имя переменной будет соответствовать адресу первого из указанных значений. Например, набор директив

text_string db ‘Hello world!’

number dw 7

table db 1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh

float_number dd 3.5e7

заполняет данными 33 байта. Первые 12 байт содержат ASCII-коды символов строки «Hello world!», и переменная text_string указывает на первую букву в этой строке, так что команда

mov al,text_string

считает в регистр AL число 48h (код латинской буквы «Н»). Если вмес­то точного значения указан знак «?», переменная считается неинициа­лизированной и ее значение на момент запуска программы может ока­заться любым. Если требуется заполнить участок памяти повторяющимися данными, используется специальный оператор DUP, имеющий формат счетчик DUP (значение). Например, определение

table_512w dw 512 dup(?)

создает массив из 512 неинициализированных слов, на первое из кото­рых указывает переменная table_512w. В качестве аргумента в операто­ре DUP могут выступать несколько значений, разделенных запятыми, и даже дополнительные вложенные операторы DUP.

3.2.2. Структуры

Директива STRUC позволяет определить структуру данных аналогич­но структурам в языках высокого уровня. Последовательность директив

имя struc

поля

имя ends

где поля — любой набор псевдокоманд определения переменных или структур, определяет, но не инициализирует структуру данных. В даль­нейшем для создания такой структуры в памяти используют имя струк­туры как псевдокоманды:

метка имя <значения>

И наконец, для чтения или записи в элемент структуры используется оператор «.» (точка). Например:

point struc ; определение структуры

x dw 0 ; три слова

y dw 0 ; со значениями по умолчанию

z dw 0 ; 0, 0, 0

color db 3 dup(?) ; и три байта

point ends

cur_point point <1,1,1,255,255,255> ; инициализация

mov ax,cur_point.x ; обращение к слову “х”

Если была определена вложенная структура, доступ к ее элементам осуществляется через еще один оператор «.» (точка).

color struc ; определить структуру color

red db ?

gren db ?

blue db ?

color ends

point struc

x dw 0

y dw 0

z dw 0

clr color <>

point ends

cur_point point <>

mov cur_point.clr.red,al ; обращение к красной компоненте цвета точки cur_point

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]