Все про Assembler українською мовою на сайті net.kr.ua

 

:: Меню ::

Головна
Введення
Архітектура реального режиму
Основи програмування
Команди і алгоритми
Розширені можливості сучасних мікропроцесорів
Система команд процесорів Intel
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 
 

:: Лічильники ::

=

 

 

 

 

fff00e50

Структури і записи

Структури


Структурами є шаблони з описами форматів даних, які можна накладати на різні ділянки пам'яті, щоб потім звертатися до полів цих ділянок за допомогою мнемонічних імен, визначених в описі структури. Структури особливо зручні в тих випадках, коли ми звертаємося до областей пам'яті, що не входять в сегменти програми, тобто до полів, які не можна описати за допомогою символічних імен. Використовуються структури також і в тих випадках, коли в програмі багато разів повторюються складні колекції даних з єдиною будовою, але значеннями, що розрізняються.
Хай в програмі, що виконує обробку медичної інформації про пацієнтів, треба оголосити декілька блоків даних з однорідними відомостями про декілька пацієнтів. Такий комплект даних зручно оформити у вигляді структури, додавши як всій структурі, так і складовим це даним наочні імена:

meddata struc ;Структура з ім'ям meddata


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


sex db 0 ;Пол


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


datein db ' / / ' ;Дата надходження


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


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

Опис структури можна розташовувати в будь-якому місці програми, але до опису конкретних структурних змінних. Транслятор, зустрівшись з описом структури, не транслює її текст, тобто не виділяє місце в пам'яті, а просто запам'ятовує приведений опис, щоб скористатися їм надалі, якщо в програмі зустрінуться оголошення змінних типу цієї структури.
У сегменті даних можна оголосити будь-яку кількість змінних, відповідних по складу описаній раніше структурі, давши їм довільні імена. Ці змінні можна заповнити при їх оголошенні конкретними даними (зрозуміло, відповідними елементам описаної раніше структури), але можна і не указувати конкретних даних, якщо дану змінну передбачається ініціалізувати не на етапі її оголошення, а по ходу виконання програми. У останньому випадку транслятор виділяє під змінну місце в пам'яті (у нашому прикладі 23 байт), заповнивши її тією конкретною інформацією, яка була вказана в описі структури:

data segment


pat 1 meddata <1234567, 'м',1955, 1З/06/981, '15/06/98'>


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


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


pattemp meddata <>


data ends

Імена patl, pat2 і так далі служитимуть іменами змінних, кожна з яких містить повний комплект даних про одного пацієнта. Кутові дужки обмежують конкретні дані, що поступають в кожну структурну змінну. Для змінної з ім'ям pattemp транслятор виділить в пам'яті 23 байт, помістивши в неї в точності те, що було вказане в описі структури (нулі і два символьні шаблони для дати):

0,0,0, ' / / ',' / / '

При обробці даних в програмі можна користуватися мнемонічними позначеннями всієї структури і її складових, причому імена елементів структури повинні відділятися крапкою:

mov Eax,patl.index ;ЕАХ=1234567


mov Si,offset patl.datein ;31=смещение елементу patl.datein


mov Dl,pat3.sex ;DL='ж'

Особливості використання в додатках DOS 32-розрядних регістрів (ЕАХ в першому рядку приведеного фрагмента) будуть описані в гл. 4.
Адресу конкретної структурної змінної можна помістити в базовий або індексний регістр, і користуватися їм в конструкціях з непрямою адресацією:

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


mov EAX[BX].index ;EAX=4389012


mov [BX].sех='м' ;Программная ініціалізація


Імена елементів структури є, по суті, зсувами до цих елементів від початку структури. В деяких випадках їх можна використовувати в цій якості і без передуючої крапки:

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


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


mov DL [BX] ;DL='M'


mov Si,birth ;SI=5 (сумнівна команда)

Записи


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

Мал. 2.14. Формат запису дати в каталозі диска.

Ці дані зручно специфікувати за допомогою запису filedate, визначуваною в програмі таким чином:

fdate record year:7, month: 4, day:5

Ключове слово record говорить про те, що ім'я fdate відноситься до запису, а мнемонічні позначення year, month і day є довільними іменами окремих бітових полів описуваного слона.
Включення в програму опису шаблону бітових полів дозволяє відмовитися від утомливого і чреватого помилками визначення "уручну" вмісту повного даного по значеннях його окремих складових, що задаються. Для приведеного вище запису оголошення конкретних змінних виглядатимуть таким чином:

filel fdate <5,6,7> ;7 червня 1985г.


file2 fdate <18,12,30> ;30 грудня 1998г.


file3 fdate <> ;"Пустая" (поки) змінна

Змінна filel буде визначена, як число 0ac7h, file2 - як число 259eh, а fileз - як число 0000h. При необхідності програмного заповнення змінною типу fdate можна користуватися іменами її складових, які трактуються асемблером, як індекси відповідних бітових полів, відлічувані від молодшого кінця слова. Для приведеного прикладу day=0, month=5, а year=9. Проте в системі команд МП 86 практично немає засобів роботи з бітовими полями. Тому програмне заповнення доведеться здійснювати за допомогою команд зрушень і логічного складання:

mov flle3,30 ;Помещаем день


mov Ax,12 ;Месяц поки в АХ


mov Cl,month ;Будем зрушувати на month битий


shl Ax,cl ; Зрушили місяць в АХ на 5 битий


or file3,ax ;Добавили біти місяця в file3


mov AX, 18 ;Год поки в АХ


mov Cl,month ;Будем зрушувати на year битий


shl Ax,cl ;Сдвинули рік в АХ на 9 битий


or file3,ax ;Добавили біти року в file3

У результаті в змінній file3 опиниться той же код 259eh, що і в змінній file2.

-

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Популярне ::

-


:: Посилання ::

-


 

 

 


Copyright © net.kr.ua, 2019-2025 (assem.us)