- •Типы данных ассемблера
- •2. Обозначение чисел и директивы определения данных
- •Системы счисления. Правила перевода
- •8. Принципы работы со стеком
- •9. Виды операндов
- •17. Команды передачи управления
- •18. Организация безусловного перехода
- •19. Процедуры. Диапазон действия процедур
- •21. Команды сравнения
- •20. Условные переходы
20. Условные переходы
Существует 18 команд условного перехода, позволяющего проверить отношение между операциями со знаком (> или <) (less – меньше, greater - больше) и без знака (above или below)
Синтаксис: jcc метка_перехода
jcc – конкретное условие команд. Метка перехода определяет метку, которая может находиться только в пределах текущего сегмента. Межсегментные переходы в условных переходах не допускаются.
21. Команды сравнения
cmp (compare) – выполняет вычитание операндов по результатам сравнения устанавливаются флаги, но операнды не изменяются.
Синтаксис: cmp опер_1, опер_2
Тип операнда |
Код |
Критерий |
Флаги |
- |
je |
опер_1=опер_2 |
ZF=1 |
- |
jne |
опер_1≠опер_2 |
PF=1 |
Со знаком |
jl/jnge |
опер_1<опер_2 |
SF≠OF |
- |
jle/jng |
опер_1≤опер_2 |
SF≠OF ZF=1 |
- |
jg/jnle |
опер_1>опер_2 |
SF=OF ZF=0 |
- |
jge/jnl |
опер_1≥опер_2 |
SF=OF |
Без знака |
jb/jnae |
опер_1<опер_2 |
CF=1 |
- |
jbe/jna |
опер_1≤опер_2 |
CF=1 ZF=1 |
- |
ja/jnbe |
опер_1>опер_2 |
CF=0 ZF=0 |
- |
jae/jnb |
опер_1≥опер_2 |
CF=0 |
Так как команды условного перехода не изменяют флага, то после команды cmp могут следовать несколько команд условного перехода.
.data
mas db dup (?)
.code
cmp mas [si], 5
je eql =5
je low <5
je grt >5
eql:
low:
grt:
Также команды условного перехода осуществляют переход на метку, анализируя состояние регистра флагов
Флаг |
Команда |
Значения флагов |
CF |
jc/jnc |
CF=1/CF=0 |
PF |
jp/jnp |
PF=1/PF=0 |
ZF |
jz/jzp |
ZF=1/ZF=0 |
SF |
js/jsp |
SF=1/SF=0 |
OF |
jo/jop |
OF=1/OF=0 |
Регистр CX имеет определенное функциональное назначение – счетчик в командах управления циклами и при работе с цепочками символов. С этим регистром связана определенная команда условного перехода:
jcxz/jecxz метка_перехода
