Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_ЛЕК.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
801.79 Кб
Скачать

Директива группирования сегментов Group

Эта директива используется для объединения сегментов в группу. Она имеет следующий формат:

имяG GROUP имяС1[, имяС2…]

Группа позволяет осуществлять доступ к данным из всех сегментов, которые находятся в ней, с помощью одной загрузки адреса группы в сегментный регистр. Этим широко пользуются компиляторы С/С++.

Директива Assume

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

ASSUME сегм_регистр1:имя1[, сегм_регистр2: имя2…]

В качестве сегментных регистров для базового Ассемблера принимаются уже известные нам регистры: CS, DS, ES или SS.

Для ОТМЕНЫ назначения для данного сегментного регистра используется ДРУГОЙ формат этой директивы:

ASSUME сегм_регистр1:NOTHING[,сегм_регистр2: NOTHING …]

Чаще всего эта директива используется в начале модуля на Ассемблере.

Рассмотрим фрагмент листинга ассемблерного файла, который был получен компилятором Borland C++ 5.02:

_TEXT segment byte public 'CODE'

_TEXT ends

DGROUP group _DATA,_BSS

assume cs:_TEXT,ds:DGROUP

_DATA segment word public 'DATA'

………………………………………

_DATA ends

_BSS segment word public 'BSS'

………………………………………

_BSS ends

_TEXT segment byte public 'CODE'

assume cs:_TEXT,ds:DGROUP

………………………………………

_TEXT ends

_DATA segment word public 'DATA'

………………………………………

_DATA ends

_TEXT segment byte public 'CODE'

_TEXT ends

end

Стандартные модели памяти

Современные версии компиляторов с Ассемблера позволяют упростить описание сегментов с помощью использования стандартных моделей памяти. В этом случае директивы SEGMENT, ENDS и ASSUME становятся НЕНУЖНЫМИ.

Директива model

Директива MODEL позволяет задавать в ассемблерной программе одну из нескольких стандартных моделей сегментации памяти (модель_памяти). Приведем ее упрощенный формат, которым мы будем пользоваться в дальнейшем:

.MODEL модель_памяти [, язык]

Параметр язык позволяет немного упростить вопросы интерфейса (стыковки) модуля на Ассемблере с общепринятыми алгоритмическими языками. Если вы их используете, то параметр язык должен быть равен одному из терминальных элементов: C, CPP, BASIC, PASCAL, FORTRAN, PROLOG. Если этот параметр НЕ указан, он считается NOLANGUAGE. Например:

.MODEL Large , C

.MODEL Small , Pascal

Директивы упрощенного описания сегментов

Определившись с используемой моделью, можно использовать упрощенные директивы описания основных сегментов (регистр букв НЕСУЩЕСТВЕНЕН!):

.Code ; формат MASM

CODESEG ; формат Ideal — см. Прил. 5.

.DATA ; формат MASM

DATASEG ; формат Ideal

.STACK ; формат MASM

STACK ; формат Ideal