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


 

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

26430. Общие закономерности строения организма 21 KB
  Эта закономерность выражается во взаимосвязях основных проявлений жизни реактивность обмен веществ размножение и рос наследственность и изменчивость с условиями внешней среды различный характер внешней среды различные химические и физические свойства среды фактор времени образ жизни борьба за существование. путём гомеостаза поддержания постоянства внутренней среды организма.
26431. Общий план строения нервной системы, значение 19.5 KB
  Она условно подразделяется на отделы: центральный и периферический состоящие из соматических осуществляющих связь с поперечнополосатыми мышцами тела или автономных образований. Вегетативные автономные образования подразделяются на симпатическую осуществляющую связь с гладкими мышцами сосудов и парасимпатическую обеспечивающую связь с гладкими мышцами внутренностей и железами.
26432. Однокамерный желудок 25 KB
  Тело желудка corpus ventriculi изогнуто. Различают большую кривизну желудка curvatura ventriculi major и малую кривизну curvatura ventriculi minor. В области большой кривизны между входной и выходной частями стенку желудка называют донной fundus ventriculi. На малую кривизну желудка с диафрагмы и печени переходит брюшина и образует малый сальник omentum minus.
26433. Опорно-двигательный аппарат (apparatus locomotorius) 20.5 KB
  Все его системы активно участвуют в реализации биомеханического двигательного поведения животных которое складывается из 2 компонентов: статический удержание животного на ногах во время покоя динамический перемещение тела в пространстве локомоция. Костносвязочная и мышечная системы единый биомеханический аппарат а его системы взаимообуславливают друг друга.
26434. Орган слуха и равновесия 20.5 KB
  Наружное ухо: ушная раковина и наружный слуховой проход железы выделяющие серу. Среднее ухо: барабанная полость молоточек наковальня чечевицеобразная косточка и стремечко евстахиева труба с носоглоткой. Внутреннее ухо: костный и перепончатый лабиринт. Внутреннее ухо состоит из преддверия vestibulum улитки cochlea и вестибулярного аппарата.
26435. Организм и его составляющие 21 KB
  Уровни анатомической организации организма: организм аппарат функциональное объединение разнородных органов которые отличаются своим происхождением развитием но объединяются общностью функций эндокринный опорнодвигательный мочеполовой аппарат система органов совокупность органов имеющих общий план строения общность развития из 1 эмбрионального зачатка функций система органов пищеварения трубкообразный тип из энтодермы. 3 группы систем органов: соматическая висцеральная и интегрирующая сердечнососудистая система...
26436. Органы кроветворения и иммунной защиты 21.5 KB
  Они делятся на: центральные органы красный костный мозг и тимус и периферические контролирующие внутреннюю среду: селезёнка и лимфоузлы; на границе организма с внешней средой: миндалины лимфоидные образования пищеварительного тракта дыхательного аппарата мочеполового аппарата. Красный костный мозг medulla osse в костях вырабатывает в периферическую кровь кровяные клетки.
26437. Органы мочевыделения organa uropoetica 21.5 KB
  Анатомический состав: почки постоянно образуют мочу мочеточники непарный мочевой пузырь и мочеиспускательный канал у самцов мочеполовой. У птиц: почки мочеточники уросинус клоаки. Иннервация: почки: вагусом через экстра и интрамуральные ганглии. Кровоснабжение: почки: почечные арт.
26438. Парасимпатическая НС 20 KB
  Парасимпатическая иннервация происходит в голове от центров среднего и продолговатого мозга через экстра и интрамуральные ганглии а также ресничный крылонёбный подчелюстной и ушной ганглии; органы грудной и брюшной полости от продолговатого мозга по вагусу через экстра и интрамуральные ганглии тазовой полости от крестцового отдела спинного мозга по тазовым нервам через экстра и интрамуральные ганглии. Перерыв происходит в парасимпатических ганглиях: экстра и интрамуральных.