Иллюстрированный самоучитель по Turbo Pascal

Синтаксис ассемблерных команд

Здесь и далее ассемблерными командами называются команды на языке встроенного ассемблера, вставляемые в тело ассемблерного оператора asm… end. Структура ассемблерной команды такова:

[Метка] [Префикс] [Код [Операнд [,Операнд]]]

В квадратных скобках указываются необязательные элементы структуры.

Метки

Любой команде ассемблерного оператора может предшествовать одна или несколько меток. В ассемблере используется два типа меток: глобальные и локальные. Глобальные метки – это обычные метки Турбо Паскаля. Они объявляются в разделе описаний после зарезервированного слова Label. С помощью глобальной метки можно передать управление в тело ассемблерного оператора оператором GOTO. Например:

Label
ALTEnt;
begin
Goto ALTEnd; {Передаем управление внутрь ассемблерного опера тора}
…….
asm
…….
ALTEnd: {Сюда можно передать управление извне}
…….
end;

Локальные метки объявляются непосредственно в теле ассемблерного оператора. Эти метки обязаны начинаться символом "@". Поскольку этот символ нельзя использовать в именах Турбо Паскаля, он позволяет отличить локальную метку от глобальной. Локальная метка не известна нигде вне ассемблерного оператора, поэтому на нее нельзя передать управление оператором GOTO. По этой же причине в разных ассемблерных операторах можно использовать одноименные локальные метки.

Префиксы

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

LOCK Захват шины

REP/REPE/REPNE Повтор строковой команды

REPZ/REPNZ Синоним REPE/REPNE

SEGCS Перекрытие CS

SEGDS Перекрытие DS

SEGSS Перекрытие SS

SEGES Перекрытие ES

Префиксы LOCK/REP/REPE/REPNE описаны в п. 12.1.3. Префиксы SEGxx определяют сегментный регистр, который должен использоваться вместо умалчиваемого, и распространяются только на следующие за ними ассемблерные команды.

Если префикс указан без кода инструкции, он распространяет свое действие на следующую ассемблерную команду.

Код инструкции очень редко имеет более одного префикса и никогда – более трех: допускается следующая последовательность:

LOCK SEGxx REPxx

Замечу, что если при обработке строковой команды произошло аппаратное прерывание, МП 8086/8088 "забывает" префиксы LOCK и SEGxx, которые, возможно, определены в той же команде, так что использовать сложные префиксные конструкции не рекомендуется.

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

Встроенный ассемблер поддерживает мнемонику всех команд, перечисленных в п.12.1.3. Кроме того, в ассемблерных командах может использоваться мнемоника инструкций процессора 8087, а также команды процессоров 80286/80287. Замечу, что инструкции 8087 допустимы только при активном состоянии {SN+}, 80286 – при {$G+}, a 80287 – в случае {$G+,N+}.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.