Команды передачи управления
Команды передачи управления
Другой тип перехода - короткий переход (SHORT), занимает всего 2 байта. Диапазон смещения, в пределах которого происходит переход: -128 ... 127. Использование такого перехода весьма ограниченно.
Межсегментный переход может иметь следующий вид: JMP FWORD PTR L, L - указатель на структуру, содержащую 48-битный адрес, в начале которого 32-й адрес смещения, затем 16-й селектор (сегмента, шлюза вызова, сегмента состояния задачи). Возможен также и такой вид межсегментного перехода:
JMP FWORD ES:[EDI].
Условные переходыJA/JNBE - перейти, если выше.
JAE/JNB - перейти, если выше или равно.
JB/JNAE - перейти, если ниже.
JBE/JNA - перейти, если ниже.
JC - перейти, если перенос.
JE/JZ - перейти, если нуль.
JG/JNLE - перейти, если больше.
JGE/JNL - перейти, если больше или равно.
JL/JNGE - перейти, если меньше.
JLE/JNG - перейти, если меньше или равно.
JNC - перейтИ, если нет переноса.
JNE/JNZ - перейти, если меньше или равно.
JNO - перейти, если нет переполнения.
JNP/JPO - перейти, если нет паритета.
JNS - перейти, если нет знака.
JO - перейти, если есть переполнения.
JP/JPE - перейти, если есть паритет.
JS - перейти, если есть знак.
JCXZ - переход, если СХ=0.
JECXZ - переход, если ECX=0.
В плоской модели команды условного перехода осуществляют переход в пределах 32-битного регистра.
Команды управления циклом. Все команды этой группы уменьшают содержимое регистра ECX.
LOOP - переход, если содержимое ECX не равно нулю.LOOPE (LOOPZ) - переход, если содержимое ECX не равно нулю и флаг ZF=1.
LOOPNE (LOOPNZ) - переход, если содержимое ECX не равно нулю и флаг ZF=0.
CALL target
Передает управление процедуре (метке) с сохранением в стеке адреса, следующей за CALL командой. В плоской модели адрес возврата представляет собой 32-битное смещение. Межсегментный вызов предполагает сохранение в стеке селектора и смещения, т.е. 48-битной величины (16 бит - селектор и 32 бита - смещение). RET [N] Возврат из процедуры. Необязательный параметр N предполагает, что команда также автоматически чистит стек (освобождает N байт). Команда имеет разновидности, которые выбираются ассемблером автоматически, в зависимости от того, является процедура ближней или дальней. Можно, однако, и явно указать тип возврата (RETN или RETF). В случае плоской модели по умолчанию берется RETN с четырехбайтным адресом возврата.