Эти высказывания просто отражают два разных взгляда программиста на числа А и В.
DATA
Сравнение знаковых и беззнаковых целых чисел
МЕХАНИЗМ ВЫПОЛНЕНИЯ
1. «Результат» := оп1 – оп2;
{установились флаги}
«Результат» НИГДЕ НЕ СОХРАНЯЕТСЯ.
A db 00111011B ; A = 59 или А = + 59
B db 10010010B ; B= 146 или B = ― 110
Считаем А и В ЗНАКОВЫМИ.
Тогда А =+59 БОЛЬШЕ B = -110
и B = -110 МЕНЬШЕ А =+59
Считаем А и В БЕЗЗНАКОВЫМИ.
Тогда А =59 НИЖЕ, чем B = 146
и B = 146 ВЫШЕ, чем А =59.
Результаты «А больше, но ниже, чем В»и «В меньше, но выше, чем А» существуют одновременно и не противоречат друг другу. Им всем соответствует одна комбинация флагов, которая установилась после CMP AL, B.
Кодировка проверяемых отношений в мнемонике комады «jXX метка»
Буквенная кодировка | Родитель (англ.) | Смысл (Рус.) | Тип операндов |
E e | Equal | Равно | Любые |
Z z | Zero | Ноль | Любые |
N n | Not | Не | Любые |
G g | Greater | Больше | Числа со знаком |
L l | Less | Меньше | Числа со знаком |
A a | Above | Выше, в смысле “больше” | Числа без знака |
B b | Below | Ниже, в смысле “меньше” | Числа без знака |
Команды условных переходов, применяемые после команды «CMP операнд_1,операнд_2»
Мнемоника условного перехода | Критерий перехода | Значения флагов для перехода |
je | операнд_1 = операнд_2 | ZF = 1 |
jne | операнд_1<>операнд_2 | ZF = 0 |
jl / jnge | операнд_1 < операнд_2 | SF <> OF |
jle / jng | операнд_1 <= операнд_2 | SF <> OF or ZF = 1 |
jg / jnle | операнд_1 > операнд_2 | SF = OF and ZF = 0 |
jge / jnl | операнд_1 => операнд_2 | SF = OF |
jb / jnae | операнд_1 < операнд_2 | CF = 1 |
jbe /jna | операнд_1 <= операнд_2 | CF = 1 or ZF=1 |
ja / jnbe | операнд_1 > операнд_2 | CF = 0 and ZF = 0 |
jae / jnb | операнд_1 => операнд_2 | CF = 0 |
Команды условных переходов
по значениям флагов
Название флага | Команда | Переходим, если: |
Флаг переноса CF | jc | CF = 1 |
Флаг четности PF | jp | PF = 1 |
Флаг нуля ZF | jz | ZF = 1 |
Флаг знака SF | js | SF = 1 |
Флаг переполнения OF | jo | OF = 1 |
Флаг переноса CF | jnc | CF = 0 |
Флаг четности PF | jnp | PF = 0 |
Флаг нуля ZF | jnz | ZF = 0 |
Флаг знака SF | jns | SF = 0 |
Флаг переполнения OF | jno | OF = 0 |
Команды условного перехода и регистр ECX/CX
Регистр ECX/CX используется КАК СЧЕТЧИК в циклах.
Чтобы удобнее было обработать ситуацию «нулевое число повторений цикла», в состав системы команд процессора введены специальные команды:
JCXZ метка (Jump if CX is Zero) – переход при CX=0;
JECXZ метка (Jump if ECXis Zero) - переход при ECX=0.
Эти команды выполняют ТОЛЬКО КОРОТКИЕ ПЕРЕХОДЫ
на дистанцию -128 … +127 байт максимум.
МЕЖСЕГМЕНТНЫЙ УСЛОВНЫЙ ПЕРЕХОД
Пусть надо передать управление из сегмента 1:
Если условие ХХ выполняется, то на метку Target1 в сегменте 2,
а если НЕ выполняется, то на метку Target2 в сегменте 3.
ОРГАНИЗАЦИЯ ЦИКЛОВ И управление ими
Программирование цикла со счетчиком
(«for») с помощью переходов
В качестве счетчика повторений цикла можно взять переменную или любой регистр общего назначения. Ну, возьмем CX – почему бы и нет?
Используем обратный счет до нуля.
Mov CX, 20 ; задаем число повторений
Cycle: