Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kratkie_otvety_ekzamen_CP_2011-12.docx
Скачиваний:
19
Добавлен:
14.04.2019
Размер:
132.13 Кб
Скачать

13. Формат директив и машинных команд. Директивы инициализации данных. Директивы описания данных на языке Ассемблера.

Программа на языке ассемблера может содержать директивы: инструкции, не переводящиеся непосредственно в машинные команды, а управляющие работой компилятора. Набор и синтаксис их значительно разнятся и зависят не от аппаратной платформы, а от используемого транслятора (порождая диалекты языков в пределах одного семейства архитектур). В качестве «джентельменского набора» директив можно выделить следующие:

  • определение данных (констант и переменных),

  • управление организацией программы в памяти и параметрами выходного файла,

  • задание режима работы компилятора,

  • всевозможные абстракции (то есть элементы языков высокого уровня) — от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования),

  • макросы.

Перечислим некоторые используемые далее директивы:

а) имя SEGMENT [атрибуты] ; открывает сегмент

......

имя ENDS ; закрывает сегмент

Когда программа находится в оперативной памяти, она состоит, в общем случае, из нескольких сегментов:

1. Сегмент кода. Он содержит операторы программы. Обычно первая исполняемая команда находится в начале этого сегмента, и DOS передает управление по адресу этого сегмента. Адресуется регистром CS.

2. Сегмент данных содержит данные, необходимые программе. Этот сегмент адресуется регистром сегмента данных DS.

3. Сегмент стека содержит адрес возврата для программы и подпрограмм, может сохранять и другие значения. Адресуется регистром SS.

4. Дополнительные сегменты используются в некоторых специальных случаях. Адресуются регистрами ES, FS или GS.

б) ASSUME регистр_сегмента:имя сегмента [,...] или ASSUME регистр_сегмента: NOTHING [,...]

Сообщает процессу ассемблирования, какой регистр сегмента связан с сегментом программы. ASSUME NOTHING отменяет действие предыдущих операторов для данного регистра.

в) Директивы определения данных

DB - определение 1 байта;

DW - определение слова (2б);

DD - определение двойного слова (4б);

DQ - определение 64х-разрядного числа (8б);

DT - определение двоично-десятичного 10-байтового числа.

Определяют переменную или присваивает ячейке памяти начальное значение, резервирует одно или несколько мест в памяти.

14. Простейшие директивы сегментации. Модели памяти. Сегменты данных.

Если разрабатывается процедура для включения в программу, написанную на языке высокого уровня, то должна быть указана та модель памяти, которая используется компилятором языка высокого уровня. Кроме того, модель памяти должна соответствовать режиму работы (типу) процессора.

Модель small поддерживает один сегмент кода и один сегмент данных. Данные и код при использовании этой модели адресуются как near (ближние).

Модель large поддерживает несколько сегментов кода и несколько сегментов данных. По умолчанию все ссылки на код и данные считаются дальними (far).

Модель medium поддерживает несколько сегментов программного кода и один сегмент данных, при этом все ссылки в сегментах программного кода по умолчанию считаются дальними (far), а ссылки в сегменте данных — ближними (near).

Модель compact поддерживает несколько сегментов данных, в которых используется дальняя адресация данных (far), и один сегмент кода с ближней адресацией (near).

Модель huge практически эквивалентна модели памяти large.

Модель tiny работает только в 16-разрядных приложениях MS-DOS. В этой модели все данные и код располагаются в одном физическом сегменте. Размер программного файла в этом случае не превышает 64 Кбайт. С другой стороны, модель flat предполагает несегментированную конфигурацию программы и используется только в 32-разрядных операционных системах. Эта модель подобна модели tiny в том смысле, что данные и код размещены в одном сегменте, только 32-разрядном. Хочу напомнить, что многие примеры из этой книги разработаны именно для модели flat.

Для разработки программы для модели flat перед директивой .model flat следует разместить одну из директив: .386, .486, .586 или .686. Желательно указывать тот тип процессора, который используется в машине, хотя на машинах с Intel Pentium можно указывать директивы .386 и .486. Операционная система автоматически инициализирует сегментные регистры при загрузке программы, поэтому модифицировать их нужно, только если необходимо смешивать в одной программе 16- и 32-разрядный код. Адресация данных и кода является ближней (near), при этом все адреса и указатели являются 32-разрядными.

Директива SEGMENT определяет логический сегмент и может быть описана следующим образом:

имя SEGMENT список атрибутов

. . .

имя ENDS

Сегменты данных

data1 segment

src DB "Test STRING To Copy"

len EQU $-src

data1 ends

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]