Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_Lektsii_2015.doc
Скачиваний:
104
Добавлен:
22.03.2016
Размер:
1.19 Mб
Скачать
  1. Команды сравнения и условного перехода

Сравнение (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 < метка >.

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

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: … ;

… ; тело цикла

… ;

LOOP L

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

LOOPE <метка> или

LOOPZ <метка>

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

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

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

LOOPNE <метка> или

LOOPNZ <метка>

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]