Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
55
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Использование регистров

Правила использования регистров в операторе asm в основном

совпадают с этими правилами для внешних процедур и функций. Опе-

ратор asm должен сохранять регистры BP, SP, SS и DS, но может

свободно изменять AX, BX, CX, DX, SI, DI, ES и регистр флагов. На

входе в оператор asm BP указывает на текущую рамку стека, SP ука-

зывает на вершину стека, SS содержит адрес сегмента стека, а DS -

адрес сегмента данных. За исключением регистров BP, SP, SS и DS

оператор asm не может делать никаких предположений относительно

содержимого других регистров на входе в этот оператор.

Синтаксис операторa ассемблера

Оператор ассемблера имеет следующий синтаксис:

[ метка":" ] < префикс > [код_операции [операнд < "," операнд >]]

где "метка" - это идентификатор метки, "префикс" - префикс кода

операции ассемблера. "Код_операции" - код инструкции или директи-

ва ассемблера, а "операнд" - выражение ассемблера.

Между операторами ассемблера (но не в них) допускается вклю-

чать комментарии. Допустимо, например, следующее:

asm

mov ax,1 { начальное значение }

mov cx,100 { счетчик }

end;

однако следующая запись ошибочна:

asm

mov { начальное значение } ax,1

mov cx, { счетчик } 100

end;

Метки

Метки в ассемблере определяются также, как в Паскале: перед

оператором записывается идентификатор метки и двоеточие. Как и в

Паскале, метки в ассемблере должны описываться в объявлении label

того блока, который содержит оператор asm. Однако из этого прави-

ла есть одно исключение. Это локальные метки.

Локальные метки - это метки, которые начинаются с символа @.

Поскольку этот символ не может быть частью идентификатора Паска-

ля, такие локальные метки автоматически ограничиваются использо-

ванием их в операторах asm. Локальная метка известна только в оп-

ределяющем ее операторе asm (то есть область действия локальной

метки начинается от ключевого слова asm и заканчивается ключевым

словом end оператора asm, который ее содержит).

В отличие от обычной метки, локальную метку перед ее исполь-

зованием не требуется описывать в объявлении label.

Идентификатор локальной метки состоит из символа @, за кото-

рым следует одна или более букв (A..Z) цифр (0..9) символов под-

черкивания или символов @. Как и все метки, идентификатор завер-

шается двоеточием.

Коды инструкций

Встроенный ассемблер поддерживает инструкции процессоров

8086/8087 и 80286/80287. Инструкции процессора 8087 доступны

только в состоянии {$N+} (разрешено использование сопроцессора),

инструкции процессора 80286 - только в состоянии {$G+} (разрешена

генерация кода для процессора 80286), а инструкции сопроцессора

80287 - только в состоянии {$G+,N+}.

Полное описание каждой инструкции содержится в справочных

материалах по процессорам 80х86 и 80х87.

Соседние файлы в предмете Программирование на Pascal