У микропроцессора есть команды, которые позволяют ему передавать управление той или иной команде, в зависимости от определенных условий, например, нулевого или единичного значения флага переноса CF. Если условие выполнено, то микропроцессор выполнит переход, в противном случае он продолжит исполнение со следующей команды программы. Условия перехода определяют шесть флагов состояния процессора (CF, AF, ZF, SF, PF, OF). То есть, процессор выполняет или не выполняет переход в зависимости от значений флагов состояния. Такие переходы называются условными. Условные переходы обычно реализуются в два шага: сначала сравниваются некоторые величины, в результате чего формируются соответствующим образом флаги состояний, а затем выполняется собственно условный переход в зависимости от значений флагов.
Команды условной передачи управления имеют следующий общий формат: Jx х MP; хх – модификатор обозначающий условия перехода,
МР – метка точки перехода.
Все команды переходов можно разделить на три группы.
В первую группу входят команды, которые ставятся после арифметических или команд сравнения. В их мнемокодах определенными буквами описывается тот исход сравнения, при котором надо сделать переход. Обычно применяется набор следующих букв:
Е - Equal(равно) - для всех типов данных;
N - Not (нет) - для всех типов данных;
G – Greater (больше) – для чисел со знаком;
L- Less (меньше) – для чисел со знаком;
A – Above (выше) – для чисел без знака;
B – Below (ниже) - для чисел со знаком.
В таблице 3.2 приведены основные команды условного перехода первой группы с условиями перехода и состояниями флагов для перехода.
Таблица 3.2 - Основные команды условного перехода первой группы
Мнемокод | Условие перехода | Состояние флагов |
JE | op1 = op2 | ZF=1 |
JNE | оp1≠ op2 | ZF=0 |
JL | оp1 < op2 | SF≠ OF |
JLE | оp1 ≤ op2 | ZF=1 или SF≠ OF |
JG | оp1 > op2 | SF = OF и ZF = 0 |
JB | p1 < op2 | СF = 1 |
JA | оp1 > op2 | СА = 0 и ZF = 0 |
JAE | оp1 ≥ op2 | СА =0 |
Во вторую группу входят те команды, которые реагируют на значение какого – нибудь определенного флага. В мнемокодах этих команд указывается первая буква проверяемого флага, если переход при единичном значении флага, либо в сочетании с буквой N, если переход при нулевом значении флага. В таблице 3.3 указаны команды второй гуппы.
Таблица 3.3 – Команды перехода по флагам
Мнемокод | Условие перехода | Мнемокод | Условие перехода |
JZ | ZF = 1 | JNZ | ZF = 0 |
JS | SF = 1 | JNS | SF = 0 |
JC | СF= 1 | JNC | СF= 0 |
JO | OF = 1 | JNO | OF = 0 |
JP | PF = 1 | JNP | PF = 0 |
В третью группу входит только одна команда условного перехода проверяющая состояние регистра СХ. Это следующая команда:
JCXZ <метка>; Если СХ = 0, перейти на метку.
Команды условной передачи управления занимают в памяти два байта: первый байт содержит код операции, а второй - относительный сдвиг (адрес метки перехода). Поэтому метка перехода MP должна находиться не далее -128 или +127 байтов от команды условной передачи управления. Приведем несколько примеров команд условной передачи управления:
1. ADD AL,BL; Если при сложении возник перенос (СF=1),
JC TOOBIG; то осуществляется переход к метке TOOBIG.
2. SUB AL,BL; Если при вычитании в регистре AL оказался ноль (ZF=1),
JZ ZERO; то осуществляется переход к метке ZERO.
3. СМР AL,BL; Если значения регистров AL и BL одинаковы (ZF=1),
JE ZERO; то осуществляет переход к метке ZERO.
В последнем примере можно было бы использовать эквивалентный мнемокод – JZ, но мнемокод JE (jump if equal - перейти, если равно) в данном случае более содержателен.
В зависимости от того, проверяется результат операции над числами без знака или над числами со знаком, применяются различные команды условного перехода. Предположим, что требуется перейти к метке BXMORE, если содержимое регистра ВХ имеет большее значение, чем содержимое регистра АХ. Если операнды не имеют знака, надо использовать последовательность следующих команд:
СМР ВХ,АХ; Сравнить содержимое регисров АХ и ВХ.
JA ME; Перейти на метку, если ВХ выше (CF=0).
Если операнды знаковые, небходимо использовать специальные команды для таких операндов. Например, СМР ВХ,АХ; Сравнить знаковые операнды.
JG ME; Перейти на метку, если ВХ больше (CF=0).
Командам условной передачи управления могут предшествовать любые команды, изменяющие состояния флагов, но обычно они используются совместно с командой сравнения (СМР) или арифметическими командами
Дата: 2018-11-18, просмотров: 482.