4498

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

Лекция

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

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

Русский

2012-11-21

24.14 KB

5 чел.

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

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

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

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

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


 

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

58252. Носовой гласный переднего ряда во французском языке 146.5 KB
  Положение всех органов речи то же, что и при [ε]. Язык должен упираться в нижние резцы, иначе звук будет похож на [α̃]. Нёбная занавеска отходит от стен фаринкса и включает носовой резонатор.
58254. СПОСОБЫ ВЫРАЖЕНИЯ МНЕНИЯ В НАУЧНОМ ТЕКСТЕ ЧЕРЕЗ ПРИЗМУ КАТЕГОРИИ СУБЪЕКТИВНОЙ МОДАЛЬНОСТИ 82.23 KB
  Целью данной работы является исследование научного текста и выявление способов выражения мнения в научном тексте при помощи категории субъективной модальности.
58255. Основы освещения сцены 1.49 MB
  Работа с источниками ведется параллельно с созданием объектов геометрии однако окончательная настройка их параметров осуществляется в процессе создания и назначения материалов поскольку освещение тесно связано с текстурированием и может влиять на особенности отображения материалов а также приводить к появлению теней. При создании сцены ее объекты освещаются автоматически однако с добавлением первого источника света установленное по умолчанию освещение отменяется. При удалении всех созданных источников сцена вновь освещается источниками...
58256. Ознайомлення з Конвенцією про права дитини 53 KB
  Мета. Формувати в учнів уявлення про Конвенцію прав дитини. Зясувати обовязки батьків і дітей. Виховувати шанобливе ставлення до батьків.
58257. Наслідки Другої світової війни для країн Західної Європи. Німеччина в другій половині ХХ ст. — на початку ХХІ ст 160 KB
  Мета: проаналізувати внутрішню та зовнішню політику провідних країн Західної Європи у другій половині ХХ ст. Які країни Європи було визволено від гітлерівської окупації радянською армією...
58258. Религия древних египтян 44.5 KB
  Геродот писал про египтян что они в отличие от других народов чрезвычайно религиозны. Религия зародилась у египтян как и у других народов еще в первобытные времена. Жизнь тогда зависела от удачной охоты и собирательства: вот почему египтяне поклонялись зверям например льву собаке кошке птицам например коршуну соколу ибису крокодилам лягушкам змеям жукам.
58259. Текстурирование простой сцены 476 KB
  Ко всем этим объектам применен тип материала Stndrd Стандартный. Сцена до текстурирования Сначала определимся с материалами. Таким образом нужно создать четыре разных материала. Он установлен по умолчанию в чем можно убедиться посмотрев на кнопку выбора материала.
58260. Английская буржуазная революция 52.5 KB
  Причины недовольства приведшие впоследствии к революции были следующими: а взимание королевской властью налогов несогласованных с парламентом принудительные государственные займы обход королевской властью...