Page 39 - 4989
P. 39
Команди умовних переходів перевіряють значення деякого
флагу або набору флагів (див. табл. 4.2). Флаги повинні бути
встановлені попередньою арифметичною чи логічною командою.
Для всіх умов, крім перевірки знаку (команда JS), це може бути,
зокрема, команда порівняння СМР:
СМР <оп1>, <оп2>
яка віднімає оп2 від оп1, але не зберігає результат, а тільки
встановлює флаги. Наприклад, якщо для беззнакових операндів
оп1<оп2, то результат віднімання менший за нуль, і в результаті
операції СМР встановиться флаг CF. Подальша перевірка цього
флагу командами JB°(якщо менше), JC (якщо встановлений флаг
переносу) або JNAE (якщо не більше і не рівне, тобто менше)
призведе до виконання умовного переходу на вказану в команді
переходу мітку (всі три команди є синонімами).
Для перевірки знаку можна застосувати команду TEST:
TEST <оп1>, <оп2>
Якщо значення оп1 і оп2 однакові, ця команда встановить
флаги SF, ZF, PF відповідно до цього значення.
Мітка являє собою ідентифікатор (довільну послідовність
латинських букв та цифр, що починається з букви), що позначає
деяке місце в коді програми. У цьому місці після мітки ставлять
двокрапку. При використанні мітки в командах переходів
двокрапку не ставлять.
4.3.2 Умовна конструкція
Аналогом умовної конструкції мов високого рівня в мові
асемблера є конструкція з використанням команд умовних та
безумовних переходів. Конструкції if без блоку else відповідає
наступна конструкція:
Jcc <мітка>
<команди>
<мітка>:
Тут Jcc – деяка команда умовного переходу. Якщо
виконується умова, задана мнемонікою, то відбувається перехід
на мітку, тобто команди безпосередньо після Jcc пропускаються.
Якщо умова не виконується, перехід не відбувається, тобто
виконується блок <команди>. Отже, командою умовного
39