-
Notifications
You must be signed in to change notification settings - Fork 1
[ЭКЗАМЕН 17] Виды переходов. Условные, безусловные переходы. Короткий, ближний, дальний переход.
Условный переход - переход, происходящий при выполнении какого-то условия.
Безусловный переход - переход, не зависящий от чего-либо (совершаемый в любом случае).
JMP - оператор безусловного перехода.
Вид перехода | Дистанция перехода |
---|---|
short (короткий) | -128..+127 байт |
near (ближний) | в том же сегменте (без изменения CS) |
far (дальний) | в другой сегмент (со сменой CS) |
Для короткого и ближнего переходов непосредственный операнд (число) прибавляется к IP. Регистры и переменные заменяют старое значение в IP (CS:IP).
JMP <операнд>
- Передаёт управление в другую точку программы, не сохраняя какой-либо информации для возврата.
- Операнд - непосредственный адрес, регистр или переменная.
- Переход типа short или near
- Обычно используются в паре с CMP
- "Выше" и "ниже" - при сравнении беззнаковых чисел
- "Больше" и "меньше" - при сравнении чисел со знаком
Команда | Описание | Состояние флагов для выполнения перехода |
---|---|---|
JO | Есть переполнение | OF = 1 |
JNO | Нет переполнения | OF = 0 |
JS | Есть знак | SF = 1 |
JNS | Нет знака | SF = 0 |
JE/JZ | Если равно/если ноль | ZF = 1 |
JNE/JNZ | Не равно/не ноль | ZF = 0 |
JP/JPE | Есть чётность/чётное | PF = 1 |
JNP/JPO | Нет чётности/нечётное | PF = 0 |
JCXZ | CX = 0 |
Команда | Описание | Состояние флагов для выполнения перехода | Знаковый |
---|---|---|---|
JB | Если ниже | CF = 1 | Нет |
JNAE | Если не выше и не равно | CF = 1 | Нет |
JC | Если перенос | CF = 1 | Нет |
JNB | Если не ниже | CF = 0 | Нет |
JAE | Если выше или равно | CF = 0 | Нет |
JNC | Если нет переноса | CF = 0 | Нет |
JBE | Есть ниже или равно | CF = 1 или ZF = 1 | Нет |
JNA | Если не выше | CF = 1 или ZF = 1 | Нет |
JA | Если выше | CF = 0 и ZF = 0 | Нет |
JNBE | Если не ниже и не равно | CF = 0 и ZF = 0 | Нет |
JL | Если меньше | SF <> OF | Да |
JNGE | Если не больше и не равно | SF <> OF | Да |
JGE | Если больше или равно | SF = OF | Да |
JNL | Если не меньше | SF = OF | Да |
JLE | Если меньше или равно | ZF = 1 или SF <> OF | Да |
JNG | Если не больше | ZF = 1 или SF <> OF | Да |
JG | Если больше | ZF = 0 и SF = OF | Да |
JNLE | Если не меньше и не равно | ZF = 0 и SF = OF | Да |
Следующий вопрос: Способы адресации.
Предыдущий вопрос: Директива END. Точка входа.
Меня всегда можно найти в Telegram: @mrrvz
-
Выполнение программы. Машинный код. Исполняемые файлы. Язык ассемблера.
-
Виды переходов. Условные, безусловные переходы. Короткий, ближний, дальний переход.
-
Стек. Регистры, связанные со стеком. Команды записи/извлечения из стека.
-
Стек. Использование при вызове подпрограмм. Команды вызоваподпрограммы и возврата.
-
Прерывания. Назначение, виды прерываний. Таблица векторов прерываний.
-
Срабатывание прерывания. Обработчик прерывания в реальном режиме. Возврат из обработчика прерывания.
-
Модели памяти в защищённом режиме. Регистры управления памятью. Страничное преобразование.
-
Математический сопроцессор. Типы данных. Представление вещественных чисел.