4498

Объединения в языке ассемблер

Лекция

Информатика, кибернетика и программирование

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

Русский

2012-11-21

24.14 KB

6 чел.

Объединения в языке ассемблер

Представим ситуацию, когда мы используем некоторую область памяти для размещения некоторого объекта программы (переменной, массива или структуры). Вдруг после некоторого этапа работы у нас отпала надобность в использовании этих данных. Обычно память останется занятой до конца работы программы. Конечно, в принципе, ее можно было бы использовать для хранения других переменных, но при этом без принятия специальных мер нельзя изменить тип и имя. Неплохо было бы иметь возможность переопределить эту область памяти для объекта с другим типом и именем. Язык ассемблера предоставляет такую возможность в виде специального типа данных, называемого объединением.

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

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

имя_объединения UNION

<описание полей>

имя_объединения ENDS

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

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

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

Листинг 7, который мы сейчас рассмотрим, примечателен тем, что кроме демонстрации использования собственно типа данных “объединение” в нем показывается возможность взаимного вложения структур и объединений.

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

  1.  16-битного смещения;
  2.  32-битного смещения;
  3.  пары из 16-битного смещения и 16-битной сегментной составляющей адреса;
  4.  в виде пары из 32-битного смещения и 16-битного селектора.

Какие из этих указателей можно применять в конкретной ситуации, зависит от режима адресации (use16 или use32) и режима работы микропроцессора.

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

Листинг 7 Пример использования объединения

masm

model small

stack 256

.586P

pnt struc  ;структура pnt, содержащая вложенное объединение

union   ;описание вложенного в структуру объединения

offs_16 dw ?

offs_32 dd ?

ends   ;конец описания объединения

segm dw ?

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

.data

point union ;определение объединения, содержащего вложенную структуру

off_16 dw ?

off_32 dd ?

point_16 pnt <>

point_32 pnt <>

point ends

tst db "Строка для тестирования"

adr_data point <> ;определение экземпляра объединения

.code

main:

mov ax,@data

mov ds,ax

mov ax,seg tst

;записать адрес сегмента строки tst в поле структуры adr_data

 mov adr_data.point_16.segm,ax

;когда понадобится, можно извлечь значение из этого поля обратно, к примеру, в регистр bx:

 mov bx,adr_data.point_16.segm

;формируем смещение в поле структуры adr_data

mov ax,offset tst ;смещение строки в ax

 mov adr_data.point_16.offs_16,ax

;аналогично, когда понадобится, можно извлечь значение из этого поля:

 mov bx,adr_data.point_16.offs_16

exit:

mov ax,4c00h

int 21h

end main

Когда вы будете работать в защищенном режиме микропроцессора и использовать 32-разрядные адреса, то аналогичным способом можете заполнить и использовать описанное выше объединение.


 

А также другие работы, которые могут Вас заинтересовать

67661. Совершенствование мотивации персонала (на примере ОАО «Жировой комбинат») 742 KB
  Однако в последние 1012 лет в теории и практике мотивации и стимулирования труда наблюдалось почти полное затишье. Отечественная социология труда и особенно некогда процветающая промышленная социология почти сошли на нет. Государственные частные корпоративные предприятия на практике...
67662. Практика применения лексико-грамматических особенностей перевода на примере текстов биографии и выступлений А. Адамса 207.5 KB
  В биографиях публицистического стиля прослеживается определенная стратегия изложения материала, имеющая непосредственное отношение к функционированию языковых единиц в тексте. В целях оптимального описания стилистических свойств рассматриваемых в работе текстов
67663. Создание фирменной стилистики для форума по нанотехнологиям 20.37 MB
  Фирменный стиль влияет на формирование мнения партнеров сотрудников поставщиков акционеров и клиентов о компании уровень доверия к ней и готовность вкладывать свои ресурсы в данный бизнес. Фирменный стиль помогает компании: добиться эффекта запоминаемости фирмы и лучшего отношения своих уже существующих и уже потенциальных клиентов.
67664. Создание базы данных для ведения учета товара АРМ мечендайзер ТОО «ATService» 3.12 MB
  Созданная программа «АРМ мечендайзер ТОО «ATService»» является перспективной разработкой, так как на основе уже хранящейся информации работают отделы служб вычислительной техники многих организаций. Таким образом, не исключено создание другими разработчиками новых версий программы...
67665. ТЕНДЕНЦИИ РАЗВИТИЯ ОБРАЗОВАНИЯ В ПОСТСОВЕТСКОЙ РОССИИ 647 KB
  Цель исследования – проанализировать современное состояние образования в России и тенденций его развития для разработки некоторых практических рекомендаций по совершенствованию образовательной деятельности на региональных уровнях: субъекта Российской Федерации...
67666. Вантажний середньо-магістральний літак підвищеної транспортної ефективності з можливістю експлуатації з ґрунтових ЗПС 16.45 MB
  Зміст розрахунково-пояснювальної записки: вибір проектних параметрів вибір; вибір та обґрунтування схеми літака; розрахунок мас літака; визначення основних геометричних параметрів; розробка компоновки літака; розрахунок центровки літака; визначення основних ЛТХ; опис конструкції літака...
67667. Возможности систем вибрационного мониторинга и диагностики роторного оборудования 3.34 MB
  Цель работы показать возможность контроля технического состояния оборудования по вибрации этого оборудования а также рассмотреть назначение и возможности систем вибрационного мониторинга и диагностики роторного оборудования. Для этого измеряется не только низкочастотная и среднечастотная...
67668. Планировка и застройка жилого образования в городе Екатеринбурге 305 KB
  Разрабатываемый участок расположен в Железнодорожном районе города Екатеринбург. Ограничен улицами Челюскинцев – Смазчиков, Восточная, Луначарского, Шевченко – Советская. Улица Восточная является магистральной улицей городского значения непрерывного движения. Челюскинцев, Смазчиков, Луначарского...