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

Размер инструкции ret

Инструкция REP генерирует код машинной инструкции возврата

ближнего или дальнего типа, в зависимости от модели вызова теку-

щей процедуры или функции.

procedure NearProc; near;

begin

asm

ret { генерируется ближний возврат }

end;

end;

procedure FarProc; far

begin

asm

ret { генерируется дальний возврат }

end;

end;

С другой стороны, инструкции RETN и RETF всегда генерируют

ближний или дальний возврат соответственно, независим от модели

вызова текущей процедуры или функции.

Автоматическое определение размера перехода

Если не указывается противное, встроенный ассемблер оптими-

зирует инструкции перехода, автоматически выбирая наиболее корот-

кую, и, следовательно, наиболее эффективную форму инструкции пе-

рехода. Такое автоматическое определение размера перехода

применяется к инструкции безусловного перехода (JMP) и всем инс-

трукциям условного перехода, когда переход выполняется на метку,

а не процедуру или функцию.

Для инструкции безусловного перехода встроенный ассемблер

генерирует короткий переход (один байт кода операции, за которым

следует один байт смещения), если расстояние до целевой метки на-

ходится в границах от -128 до 127 байт. В противном случае гене-

рируется ближний переход (один байт кода операции, за которым

следую два байта смещения).

Для инструкций условного перехода короткий переход (один

байт кода операции, за которым следует один байт смещения) гене-

рируется, если расстояние до целевой метки находится в пределах

от -128 до 127 байт, в противном случае встроенный ассемблер ге-

нерирует короткий переход с обратным условием, который выполняет

переход на целевую метку через ближний переход (в общем случае 5

байт). Например, оператор ассемблера:

JC Stop

где Stop не находится в границах короткого перехода, преобразует-

ся в последовательность машинных кодов, соответствующих инструк-

циям:

jnc Skip

jmp Stop

Skip:

Переходы на точки входа в процедуру или функцию всегда имеют

ближний или дальний тип (но не короткий), а условные переходы на

процедуру или функцию не допускаются. Вы можете указать встроен-

ному ассемблеру, что нужно генерировать ближний или дальний пере-

ход, используя конструкцию NEAR PTR или FAR PTR. Например, опера-

торы ассемблера:

jmp NEAR PTR Stop

jmp FAR PTR Stop

будут всегда генерировать соответственно ближний и дальний пере-

ход, даже если на метку Stop можно перейти с помощью короткого

перехода.

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