Команды условного перехода. Все команды условного перехода разделяют на три группы.
Jxx <метка>
Все команды условного перехода разделяют на три группы.
В первую группу входят команды, которые следуют после команды сравнения. В их мнемокодах с помощью определенных букв описывается то исход сравнения, при котором надо делать переход.
E – equal (равно)
N – not (не, отрицание)
G – greater (больше) – для чисел со знаком
L – less (меньше) – для чисел со знаком
A – above (выше, больше) – для чисел без знака
B – below (ниже, меньше) – для чисел без знака
Мнемокод | Содержательное условие для перехода после CMP op1,op2 | Состояние флагов для перехода |
для любых чисел: | ||
JE | op1=op2 | ZF=1 |
JNE | op1<>op2 | ZF=0 |
для чисел со знаком: | ||
JL/JNGE | op1<op2 | SF<>OF |
JLE/JNG | op1<=op2 | SF<>OF или ZF=1 |
JG/JNLE | op1>op2 | SF=OF и ZF=0 |
JGE/JNL | op1>=op2 | SF=OF |
для чисел без знака: | ||
JB/JNAE | op1<op2 | CF=1 |
JBE/JNA | op1<=op2 | CF=1 или ZF=1 |
JA/JNBE | op1>op2 | CF=0 и ZF=0 |
JAE/JNB | op1>=op2 | CF=0 |
Пример: записать в Z максимальное из чисел X и Y.
MOV AX,X
CMP AX,Y ; X=Y?
JGE M ; X>=Y ->M
MOV AX,Y
M: MOV Z,AX
Во вторую группу команд условного перехода входят те, которые следуют после команд, отличных от команды сравнения, и которые реагируют на то или иное значение какого-нибудь определенного флага. В мнемокодах этих команд указывается первая буква проверяемого флага, если переход должен быть выполнен при значении 1 у флага, либо эта буква указывается с буквой N (not), если переход надо сделать при нулевом значении флага.
Мнемокод | Условие перехода | Мнемокод | Условие перехода |
JZ | ZF=1 | JNZ | ZF=0 |
JS | SF=1 | JNS | SF=0 |
JC | CF=1 | JNC | CF=0 |
JO | OF=1 | JNO | OF=0 |
JP | PF=1 | JNP | PF=0 |
Пример: требуется вычислить C=A*A+B, но если ответ превосходит размер байта, тогда надо передать управление на метку ERROR.
MOV AL,A
MUL AL
JC ERROR
ADD AL,B
JC ERROR
MOV C,AL
В третью группу входит только одна команда условного перехода, проверяющая значение регистра CX:
JCXZ <метка>
Действие команды JCXZ можно описать так:
if cx=0 then goto < метка >.
Дата добавления: 2015-10-09; просмотров: 1489;