Команда безусловного перехода - JMP:
Самый простой способ изменить последовательность выполнения команд
заключается в использовании команды jmp — так называемой команды безусловного
перехода. Она перезаписывает указатель команд (регистр IP или CS), что заставляет процессор «переключиться» на выполнение команды по
указанному адресу. Формат команды таков:
JMP [тип_перехода] операнд.
Команде нужно передать один обязательный операнд — адрес в памяти, с которого процессор должен продолжить выполнение программы.
В зависимости от «расстояния» переходы бывают трех типов: короткие
(short), ближние (near) и дальние (far). Тип перехода задается необязательным
параметром инструкции jmp. Если тип не задан, по умолчанию используется
тип near.
Метка — это идентификатор, заканчивающийся двоеточием. Во время компиляции он будет заменен точным адресом согласно его позиции в программе. Рассмотрим следующий
фрагмент кода:
mov ах,4 ;АХ = 4
new_loop : ;метка new_loop
mov bx, ах ;копируем АХ в ВХ
Чтобы перейти к метке new_loop из другого места программы, используйте
команду:
jmp new_loop ;переходим к new_loop
После выполнения этой команды выполнение программы продолжится с
метки new_loop.
Короткий переход полезен в
ситуации, где метка назначения находится в пределах 128 байтов. Поскольку
команда короткого перехода занимает 2 байта, команда ближнего перехода
занимает 3 байта, а дальнего — 5 байтов, мы можем сэкономить байт или три.
Условные переходы - Jx:
jz is_true : переходит к is_true, если флаг ZF = 1
jc is_true : переходит к is_true, если флаг CF = 1
js is_true : переходит к is_true, если флаг SF = 1
jo is_true : переходит к is_true, если флаг переполнения OF = 1
Любое условие может быть инвертировано, например:
jnz is_true : переходит к is_true, если флаг ZF = О
Так же образованы имена команд JNC, JNS и JNO.
Инструкции для беззнаковых чисел:
JE(JZ) - Jump,если равно (Jump,если 0);
JNE(JNZ) - Jump, если не равно (Jump,если не 0);
JA(JNBE) - Jump, если больше (Jump, если не меньше или равно);
JB(JNAE) - Jump, если меньше (Jump, если не больше или равно);
JNA(JBE) - Jump, если не больше (Jump, если меньше или равно);
JNB(JAE) - Jump, если не меньше (Jump, если больше или равно;
Инструкции для чисел со знаком:
JE(JZ) - Jump,если равно (Jump,если 0);
JNE(JNZ) - Jump, если не равно (Jump, если не 0);
JG(JNLE) - Jump, если больше (Jump, если не меньше или равно);
JL(JNGE) - Jump, если меньше (Jump, если не больше или равно);
JNG(JLE) - Jump, если не больше (Jump, если меньше или равно);
JNL(JGE) - Jump, если не меньше (Jump, если больше или равно);
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.