TURBO PASCAL |
Новости
|
Автоматическое определение размера переходаЕсли не указывается противное, встроенный ассемблер оптими- зирует инструкции перехода, автоматически выбирая наиболее корот- кую, и, следовательно, наиболее эффективную форму инструкции пе- рехода. Такое автоматическое определение размера перехода применяется к инструкции безусловного перехода (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 можно перейти с помощью короткого перехода. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |