Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Структуры





Структура представляет собой набор полей байтов, объединенных одним именем.

Объявление структуры в программе на языке Ассемблера включает в себя 2 действия:

1. Объявление шаблона или типа структуры директивами STRUC и ENDS.

2. Объявление собственно структуры.

Формат объявления типа структуры:

имя STRUC

описания-полей

имя ENDS

Директивы STRUC и ENDS обозначают соответственно начало и конец описания шаблона (типа) структуры. Описание типа структуры задает имя типа структуры и число, типы и начальные значения полей структуры.

Указанное в директивах STRUC и ENDS имя задает новое имя типа структуры. Оно должно быть уникальным. Описания-полей определяют поля структуры и могут быть заданы в одной из следующих форм:

[[имя]] DB значение,...

[[имя]] DW значение,...

[[имя]] DD значение,...

[[имя]] DQ значение,...

[[имя]] DT значение,...

 

Каждое поле может иметь свое имя. Директивы DB, DW, DD, DQ или DT задают длину поля. Для каждого поля могут быть указаны начальные значения, которыми инициализируются поля при отсутствии соответствующих начальных значений при объявлении структуры. Имя каждой директивы, если оно задано, должно быть уникальным и представляет смещение поля относительно начала структуры.

Значением поля может быть число, символ, строковая константа или имя другого объекта. Для определения множества значений поля может использоваться оператор DUP. Если в качестве значения задана строковая константа, поле занимает столько байтов, сколько символов в константе. Если задано несколько значений, они должны разделяться запятыми.

Объявление типа структуры может содержать только описания полей и комментарии. По этой причине структуры не могут быть вложенными.

Пример:

table STRUC

count DB 10

value DW 10 DUP(?)

tname DB 'font'

table ENDS

При обработке директив STRUC и ENDS формируется шаблон структуры, а сами данные создаются при объявлении структуры, которое имеет следующий вид:

[[имя]] имя-структуры <[[значение,...]]>

По такому объявлению создается переменная типа структура со структурой полей, соответствующей шаблону, заданному директивой STRUC с именем имя-структуры.

Имя задает имя переменной. Если имя опущено, MASM распределяет память, но не создает переменную, которую можно было бы использовать для доступа к структуре.

В скобках <> указывается список значений полей структуры. Значения в списке, если их несколько, должны разделяться запятыми. Каждое значение может быть целым числом, строковой константой или выражением, тип которого должен совпадать с типом соответствующего ему поля. Для каждого поля может быть задано одно значение.

Скобки <> обязательны, даже если начальные значения не заданы.

Если в качестве значения используется оператор DUP, в скобки <> следует заключать список значений оператора DUP.

Задавать значения всех полей структуры необязательно. Если Ассемблер вместо значения обнаружит левый пробел, будет использовано начальное значение поля, заданное при описании типа структуры, а если и оно опущено, значение поля будет не определено.

Следует помнить, что объявлении структуры нельзя задавать значения полей, для которых в соответствующем шаблоне задано множество значений. Например:

strings STRUC

buffer DB 100 DUP(?)

crif DB 13,10

guery DB 'Filename'

endm DB 35

strings ENDS

При объявлении структуры с использованием этого шаблона значения полей buffer и crif не могут быть заданы, так как шаблон для них определяет множество значений. Значение поля guery может быть перекрыто только значением, длина которого не превышает 8 байтов. Аналогично, значение поля endm может быть перекрыто любым однобайтовым значением.







Date: 2015-05-22; view: 494; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию