Курс лекций для студентов заочного факультета самара
Вид материала | Курс лекций |
Содержание3.2.Организация программы. 3.2.3. Директивы задания набора допустимых команд |
- Курс лекций для студентов заочного и очно-заочного образования рпк «Политехник», 941.31kb.
- Курс лекций для студентов очного и заочного отделения специальностей 1-25 01 10 коммерческая, 830.45kb.
- Курс лекций для студентов заочного обучения Бурмистрова Л. А., Финансы предприятий:, 1991.45kb.
- Методические указания для студентов 1 курса заочного отделения исторического факультета, 244.82kb.
- В. С. Юрчук философия права курс лекций, 1556.93kb.
- Планы семинарских занятий на 2011-2012 учебный год (6 часов) по предмету «Экономическая, 205.43kb.
- Курс лекций Санкт-Петербург 2007 удк 342. 9 Ббк 67. 401 Б83 Рецензенты, 6052.89kb.
- Тексты лекций для студентов заочной формы обучения всех специальностей москва 2001, 2466.08kb.
- Краткий конспект лекций по дисциплине «Основы лесоводства и лесной таксации» Для студентов, 923.35kb.
- Лекций для студентов 4 курса педиатрического факультета, переведенных на контролируемую, 18.72kb.
3.2.Организация программы.
3.2.1. Модели памяти
Модели памяти задаются директивой .MODEL.
model модель, язык, модификатор, где модель – одно из следующих слов:
TINY – код, данные и стек размещаются в одном и том же сегменте размером до 64 Кб. Эта модель памяти используется для написания программ на языке ассемблера в формате COM файла;
SMALL – код размещается в одном сегменте, а данные и стек – в другом (для их описания могут применяться разные сегменты, но объединенные в одну группу). Эта модель памяти используется для написания программ на языке ассемблера в формате EXE файла;
COMPACT – код размещается в одном сегменте, а для хранения данных могут использоваться несколько сегментов;
MEDIUM – код размещается в нескольких сегментах, а все данные – в одном;
LARGE, HUGE – и код, и данные могут занимать несколько сегментов;
FLAT – то же, что и TINY, но используются 32 – битные сегменты, так что максимальный размер сегмента, содержащего и данные, и код, и стек, - 4 Мб.
Язык – необязательный операнд, принимающий значения различных языков программирования, при указании которого подразумевается, что процедуры рассчитаны на вызов из программ на соответствующем языке программирования.
Модификатор – это необязательный операнд, принимающий значения NEARSTACK (по умолчанию) или FARSTACK. Во втором случае сегмент стека не будет объединяться в одну группу с сегментами данных.
Упрощенные директивы определения сегментов
Каждая программа, написанная на любом языке программирования, состоит из одного или нескольких сегментов. Область памяти, в которой находятся команды, называется сегментом кода, область памяти с данными – сегментом данных и область памяти, отведенная под стек – сегментом стека. Ассемблер позволяет помещать данные в сегмент кода, разносить код по нескольким сегментам, помещать стек в один сегмент с данными или вообще использовать один сегмент для всего. Для описания сегментов программы используются директивы SEGMENT и ENDS. Однако, чаще всего используются упрощенные директивы определения сегментов, которые вступают в силу после установления модели памяти.
Директива .CODE описывает сегмент кода:
.code.
Директива .STACK описывает сегмент стека:
.stack размер.
Директива .DATA описывает основной сегмент данных:
.data.
3.2.2. Процедуры
Процедурой в ассемблере является всё то, что в других языках называют подпрограммами, функциями, процедурами и т.д. Ассемблер не накладывает на процедуры никаких ограничений- на любой адрес программы можно передать управление командой CALL, и оно вернётся к вызвавшей процедуре, как только встретится команда RET. Такая свобода выражения легко может приводить к трудночитаемым программам, и в язык ассемблера были включены директивы логического оформления процедур.
Метка proc язык тип USES регистры
…
ret
метка endp
Все операнды PROC необязательны.
Тип может принимать значения NEAR и FAR, и если он указан, все команды RET в теле процедуры будут заменены соответственно на RETN и RETF. По умолчанию подразумевается, что процедура имеет тип NEAR в моделях памяти TINY, SMALL и COMPACT.
Конец программы
End start_label
Этой директивой завершается любая программа на ассемблере. В роли необязательного операнда здесь выступает метка (или выражение), определяющая адрес, с которого начинается выполнение программы. Если программа состоит из нескольких модулей, только один файл может содержать начальный адрес, так же как в С только один файл может содержать функцию main().
3.2.3. Директивы задания набора допустимых команд
По умолчанию ассемблеры используют набор команд процессора 8086 и выдают сообщения об ошибках, если выбирается команда, которую этот процессор не поддерживал. Для того чтобы ассемблер разрешил использование команд, появившихся в более новых процессорах, и команд расширений, предлагаются следующие директивы:
.8086- используется по умолчанию. Разрешены только команды 8086;
.186- разрешены команды 80186;
.286 и .286с- разрешены непривилегированные команды 80286;
.286р- разрешены все команды 80286;
.386 и .386с- разрешены непривилегированные команды 80386;
.386р- разрешены все команды 80386;
.486 и .486с- разрешены непривилегированные команды 80486;
.486р- разрешены все команды 80486;
.586 и .586с- разрешены непривилегированные команды P5 (Pentium);
.586р- разрешены все команды P5 (Pentium);
.686 - разрешены непривилегированные команды P6 (Pentium Pro, Pentium II);
.686р- разрешены все команды P6 (Pentium Pro, Pentium II);
.8087 – разрешены команды арифметического сопроцессора 8087;
.287 – разрешены команды арифметического сопроцессора 80287;
.387 – разрешены команды арифметического сопроцессора 80387;
.487 – разрешены команды FPU 80486;
.587 – разрешены команды FPU 80586;
.MMX – разрешены команды IA MM;
.K3D – разрешены команды AMD 3D;
Если присутствует директива .386 и выше, ассемблер TASM определяет все сегменты как 32-битные при условии, что директива указана перед директивой .model.