Отладка приложений


Инструкции переходов и ветвлений


  •  JMP  абсолютный переход

Как указано в названии, JMP передает управление по абсолютному адресу.

  •  JE        переход, если равно
  •  JL        переход, если меньше чем
  •  JG       переход, если больше чем
  •  JNE     переход, если не равно
  •  JGE     переход, если больше или равно
  •  OLE    переход, если меньше или равно

От инструкций СМР и TEST немного пользы, если программист не имеет возможности воздействовать на их результаты. Условные переходы позволяют выполнять соответствующие ветвления программы. Показанные выше инструкции — это наиболее общие условные переходы, с которыми вы встретитесь в окне Disassembly, хотя всего существует более трех десятков (точнее — 31) различных условных переходов, многие из которых выполняют те же самые действия за исключением того, что в мнемонике используется слово "NOT". Например, инструкция JLE (переход, если меньше или равно) имеет тот же код операции, что JNG (переход, если не больше чем). Работая с другим дизассемблером (не из отладчика Visual C++), можно увидеть иные инструкции. Чтобы расшифровывать все инструкции переходов, можно найти jcc-коды в руководствах Intel.

В следующем примере инструкции условных переходов расположены в том же порядке, как в табл. 6.4. Один из условных переходов немедленно следует за инструкциями СМР и TEST. Оптимизированный код может содержать несколько инструкций, разбросанных между проверкой и переходом, но эти инструкции никогда не изменяют флажков.

Просматривая код дизассемблера, можно заметить, что условная проверка вообще-то противоположна той, что была введена в исходный код. Пример показан в первой секции следующего кода.

void JumpExamples ( int i )

{

// Здесь показан оператор С-кода. Заметьте, что условие записано как

// "i > 0", но компилятор генерирует противоположное условие.


Начало  Назад  Вперед



Книжный магазин