Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
46
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

2.4. Структуры и записи

Структуры

Структуры представляют собой шаблоны с описаниями форматов дан­ных, которые можно накладывать на различные участки памяти, чтобы затем обращаться к полям этих участков с помощью мнемонических имен, определенных в описании структуры. Структуры особенно удобны в тех случаях, когда мы обращаемся к областям памяти, не входящим в сег­менты программы , т.е. к полям, которые нельзя описать с помощью сим-

60

Глава 2

^Основы программирования

61

волических имен. Используются структуры также и в тех случаях, когда в программе многократно повторяются сложные коллекции данных с еди­ным строением, но различающимися значениями.

Пусть в программе, выполняющей обработку медицинской информа­ции о пациентах, надо объявить несколько блоков данных с однородны­ми сведениями о нескольких пациентах. Такой комплект данных удобно оформить в виде структуры, придав как всей структуре, так и составляю­щим ее данным наглядные имена:

meddata struc ;Структура с именем meddata

index dd 0 ;Номер карты \

sex db 0 ;Пол \

birth dw 0 ;Год рождения

datein db' / / ' ;Дата поступления

dateout db' / / ' ;Дата выписки

meddata ends ;Конец описания структуры

Описание структуры можно располагать в любом месте программы, но до описания конкретных структурных переменных. Транслятор, встре­тившись с описанием структуры, не транслирует ее текст, т.е. не выделяет место в памяти, а просто запоминает приведенное описание, чтобы вос­пользоваться им в дальнейшем, если в программе встретятся объявления переменных типа этой структуры.

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

data segment

patl meddata <1234567,'M',1955,'13/06/98Yl5/06/98'>

pat2 meddata <1982234,V, 1932,' 18/06/98','25/06/98'>

pat3 meddata <4389012,'ж',1966,'01/12/97','15/12/97'>

pattemp meddata <> -;

data

Имена patl, pat2 и т.д. будут служить именами переменных, каждая из которых содержит полный комплект данных об одном пациенте. Угловые скобки ограничивают конкретные данные, поступающие в каждую струк­турную переменную. Для переменной с именем pattemp транслятор выде­лит в памяти 23 байт, поместив в нее в точности то, что было указано в описании структуры (нули и два символьные шаблона для даты):


ends

о,о,о; //•;//'

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

mov EAX,patl.index ;EAX=1234567

mov SI,offset patl.datein;SI=CMeni;eHHe элемента patl.datein

mov DL,pat3.sex ;ОЬ='ж'

Особенности использования в приложениях DOS 32-разрядных регист­ров (ЕАХ в первой строке приведенного фрагмента) будут описаны в гл. 4.

Адрес конкретной структурной переменной можно поместить в базо­вый или индексный регистр, и пользоваться им в конструкциях с косвен­ной адресацией:

mov BX,offset pat3 ;ВХ=смещение pat3

mov EAX,[BX].index ;EAX=4389012

mov [BX].sex='M' ;Программная инициализация

Имена элементов структуры являются, в сущности, смещениями к этим элементам от начала структуры. В некоторых случаях их можно ис­пользовать в этом качестве и без предваряющей точки:

mov BX,offset pat2 ;ВХ=смещение pat2

add BX,sex ;ВХ=смещение pat2.sex

mov DL,[BX] ;DL='M'

mov SI,birth ;SI=5 (сомнительная команда)

Записи

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

Известно, что дата создания файла хранится в каталоге диска в виде 16-битового слова, в котором старшие 7 бит обозначают год (от 1980), следующие 4 бит — месяц и последние 5 бит — день (рис. 2.14).

Биты слова 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00

Год Месяц День

Рис. 2.14. Формат записи даты в каталоге диска.

62