Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet162/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   158   159   160   161   162   163   164   165   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Объединения
Представим ситуацию, когда мы используем некоторую область памяти для раз-
мещения того или иного объекта программы (переменной, массива или структу-
ры). Вдруг после некоторого этапа работы у нас отпадает надобность в этих дан-
ных. В обычном случае память остается занятой до конца работы программы.
Конечно, ее можно было бы задействовать для хранения других переменных, но
без принятия специальных мер нельзя изменить тип и имя данных/Неплохо было
бы иметь возможность переопределить эту область памяти для объекта с другими
типом и именем. Ассемблер предоставляет такую возможность в виде специально-
го типа данных, называемого объединением. Объединение — тип данных, позволя-
ющий трактовать одну и ту же область памяти как данные, имеющие разные типы
и имена.
Описание объединений в программе напоминает описание структур, то есть
сначала указывается шаблон, в котором с помощью директив описания данных
перечисляются имена и типы полей:
UNION
полей>
ENDS
Отличие объединений от структур состоит, в частности, в том, что при опреде-
лении переменной типа объединения память выделяется в соответствии с разме-
Все прилагаемые к книге файлы можно найти по адресу http://www.piter.com/download. —
Примеч. ред.


Объединения 285
ром максимального элемента. Обращение к элементам объединения происходит
по их именам, но при этом нужно, конечно, помнить, что все поля в объединении
накладываются друг на друга. Одновременная работа с элементами объединения
исключена. В качестве элементов объединения можно использовать и структуры.
Листинг 13.6, который мы сейчас рассмотрим, примечателен тем, что кроме де-
монстрации собственно типа данных объединение, в нем показывается возмож-
ность взаимного вложения структур и объединений. Постарайтесь внимательно
отнестись к анализу этой программы. Основная идея здесь в том, что указатель на
память, формируемый программой, может быть представлен в виде:
смещения;
32-разрядного смещения;
пары из 16-разрядного смещения и 16-разрядной сегментной составляющей
адреса;
пары из 32-разрядного смещения и 16-разрядного селектора.
Какие из этих указателей можно применять в конкретной ситуации, зависит от
режима адресации
или use32) и режима работы процессора. Шаблон объ-
единения, описанный в листинге 13.6, позволяет упростить формирование и ис-
пользование указателей различных типов.
Листинг
Пример использования объединения
model small
s t a c k 256
pnt struc
union
offs_16
offs_32 dd
ends
segm dw
ends
point union
структура pnt, содержащая вложенное объединение
описание вложенного в структуру объединения
конец описания объединения
конец описания структуры
определение объединения,
содержащего вложенную структуру
off_16 dw ?
off_32 dd ?
point_16pnt <>
point_32pnt <>
point ends
tst db "Строка для тестирования"
adr_datapoint <>
экземпляра объединения
mov
mov
mov
tst
адрес сегмента строки tst в поле структуры adr_data
mov
;когда понадобится, можно извлечь значение из этого поля обратно,
;к примеру, в регистр
mov
;формируем смещение в поле структуры adr_data
mov
tst ;смещение строки в ах
mov


 Глава
Сложные структуры данных
 истинг
 (продолжение)
когда понадобится, можно извлечь
;значение из этого поля:
e x i t :
mov
int
main
Когда вы будете работать в защищенном режиме процессора и использовать
32-разрядные адреса, то аналогичным способом можете заполнить и задействовать
описанное ранее объединение.
Записи
На практике довольно часто возникает необходимость работы с различными про-
граммными индикаторами со значениями
ная величина для операций с памятью — байт. А для программного индикатора
достаточно одного бита. То есть из восьми разрядов нужно задействовать всего
один. При большом количестве таких индикаторов расход оперативной памяти
может быть весьма ощутимым.
Когда мы знакомились с логическими командами, то говорили, что их можно
применять для решения подобной проблемы. Но это не совсем эффективно, так
как велика вероятность ошибок, особенно при составлении битовых масок. Ком-
пиляторы TASM и MASM предоставляют в распоряжение программиста
альный тип данных, использование которого помогает решить проблему работы
с битами более эффективно. Речь идет о специальном типе данных — записях. За-
пись — структурный тип данных, состоящий из
числа элементов
длиной от одного до нескольких битов.
При описании записи для каждого элемента указывается его длина в битах и,
что необязательно, некоторое значение. Суммарный размер записи определяется
суммой размеров ее полей и не может быть более
или 32 битов. Если суммар-
ный размер записи меньше указанных значений, то все поля записи «прижимают-
ся» к младшим разрядам.
Использование записей в программе, так же как и структур, организуется в три
этапа.
1. Задание шаблона записи, то есть определение набора битовых полей, их длин
и, при необходимости, инициализация полей.
2. Определение экземпляра записи. Так же как и для структур, этот этап подразу-
мевает инициализацию конкретной переменной типом заранее определенной
с помощью шаблона записи.
3. Организация обращения к элементам записи.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   158   159   160   161   162   163   164   165   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish