Команды сравнения и условного перехода

Сравнение (compare):

CMP op1,op2

SUB op1,op2

Команды условного перехода

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 < метка >.

Команды управления циклом

MOV CX, N; CX – счетчик цикла (число повторений)

L: …;

…; тело цикла

…;

DEC CX; CX:= CX-1

CMP CX, 0; CX=0?

JNE L; CX<>0 -> goto L

Управление циклом по счетчику:

LOOP <метка>

С помощью данной команды цикл запишется следующим образом:

MOV CX, N;

L: …;

…; тело цикла

…;

LOOPL

Цикл по счетчику и пока равно (пока ноль):

LOOPE <метка> или

LOOPZ <метка>

Условие повторения: (CX<>0) и (ZF=1).

Условие выхода: (CX=0) или (ZF=0).

Цикл по счетчику и пока не равно (пока не ноль):

LOOPNE <метка> или

LOOPNZ <метка>

Условие повторения: (CX<>0) и (ZF=0).

Условие выхода: (CX=0) или (ZF=1).

Язык Ассемблера IBM PC. Структура операторов


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: