Порядок загрузки сегментов
Обычно сегменты загружаются в память в том порядке, в котором они описываются в тексте программы, причем, если несколько сегментов объединяются в один, порядок определяется по началу первого из объединяемых сегментов. Этот порядок можно изменить с помощью одной из специальных директив. .alphaЭта директива устанавливает алфавитный порядок загрузки сегментов. .dosseg; для MASM и WASMили dosseg; для MASM и TASMУстанавливает порядок загрузки сегментов, существующий в MS DOS и часто требуемый для взаимодействия программ на ассемблере с программами на языках высокого уровня. DOSSEG устанавливает следующий порядок загрузки сегментов: 1. Все сегменты класса 'CODE'. 2. Все сегменты, не принадлежащие группе DGROUP и классу 'CODE'. 3. Группа сегментов DGROUP: 3.1. Все сегменты класса 'BEGDATA'. 3.2. Все сегменты, кроме классов 'BEGDATA', 'BSS' и 'STACK'. 3.3. Все сегменты класса 'BSS'. 3.4. Все сегменты класса 'STACK'. .seqУстанавливает загрузку сегментов в том порядке, в котором они описаны в тексте программы. Этот режим устанавливается по умолчанию, так что директива.SEQ просто отменяет действие.ALPHA или.DOSSEG. Знание порядка загрузки сегментов необходимо, например, для вычисления длины программы или адреса ее конца. Для этого надо знать, какой сегмент будет загружен последним, и смещение последнего байта в нем.
Конец программы end start_labelЭтой директивой завершается любая программа на ассемблере. В роли необязательного операнда здесь выступает метка (или выражение), определяющая адрес, с которого начинается выполнение программы. Если программа состоит из нескольких модулей, только один файл может содержать начальный адрес, так же как в C только один файл может содержать функцию main(). Директивы задания набора допустимых команд По умолчанию ассемблеры используют набор команд процессора 8086 и выдают сообщения об ошибках, если выбирается команда, которую этот процессор не поддерживал. Для того чтобы ассемблер разрешил использование команд, появившихся в более новых процессорах, и команд расширений, предлагаются следующие директивы: Используется по умолчанию. Разрешены только команды 8086; Разрешены команды 80186; И.286c — разрешены непривилегированные команды 80286; P — разрешены все команды 80286; И.386c — разрешены непривилегированные команды 80386; P — разрешены все команды 80386; И.486c — разрешены непривилегированные команды 80486; P — разрешены все команды 80486; И.586c — разрешены непривилегированные команды P5 (Pentium); P — разрешены все команды P5 (Pentium); Разрешены непривилегированные команды P6 (Pentium Pro, Pentium II);
|