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-разрядные адреса, то аналогичным способом можете заполнить и использовать описанное выше объединение.


 

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

5177. Закон гомологических рядов 37.5 KB
  Закон гомологических рядов Обработка обширного материала наблюдений и опытов, детальное исследование изменчивости многочисленных линнеевских видов (линнеонов), огромное количество новых фактов, полученных главным образом при изучении культурных раст...
5178. Генетика бактерий. Особенности морфологической организации ядерного аппарата бактерий 67 KB
  Генетика бактерий На модели бактерий и вирусов были открыты все основные закономерности генетики. 1.Особенности морфологической организации ядерного аппарата бактерий: - не имеет ядерной мембраны, ядрышка, носит название нуклеоид - носителем ...
5179. Основы генетики 92.5 KB
  Основы генетики. Генетика - наука о наследственности и изменчивости. Наследственность - это свойство дочерних организмов быть похожими на своих родителей морфологическими, физиологическими, биохимическими и другими признаками и особенностями...
5180. Характеристика генетического аппарата бактерий 4.97 MB
  Характеристика генетического аппарата бактерий Организация генома. Генетический аппарат бактерий представлен бактериальной хромосомой, внехромосомными факторами наследственности - плазмидами, а также входящими в их состав мобильными генетическ...
5181. Генетика и биополитический конфликт в 20 веке. Евгеника 50.5 KB
  Евгеника В 1883 году англичанин Фрэнсис Гальтон – кузен Чарльза Дарвина - заложил основы евгеники. Он считал, что большинство признаков у человека являются наследственными, и их можно улучшить путём контролируемых браков. В позитивной гене...
5182. Генетика и человек 241.5 KB
  Почему люди интересуются генетикой? Люди интересуются генетикой давно, правда, не всегда они называли вопросы наследования определенных признаков генетикой. Проще говоря, издревле человека интересовало, почему дети, как правило, похожи на своих роди...
5183. Генетика и эволюция. строение митотической хромосомы. Типы хромосом... 228.5 KB
  Строение митотической хромосомы. Типы хромосом, их число, размер. Кариотип и гиограмма. Хромосомы человека. Денверская классификация хромосом человека. В области первичной перетяжки располагается центромера – это пластинчатая структура, имею...
5185. Моногібридне та аналізуюче схрещування. Дигібридне схрещування. Інші лабораторні роботи 669.3 KB
  Моногібридне та аналізуюче схрещування. Дигібридне схрещування. Полігібридне схрещування. Взаємодія алельних генів. Взаємодія неалельних генів. Генетика статі. Успадкування ознак зчеплених зі статтю...