Косвенный переход (от англ. indirect branch, также используются термины computed jump (вычисляемый переход), indirect jump (непрямой переход) и register-indirect jump (регистро-косвенный переход)) — в программировании команда продолжить выполнение инструкций с заданной позиции в коде, где адрес позиции не определён в коде заранее, а вычисляется в ходе выполнения программы.
В данном случае в качестве примера можно привести команду вида 'косвенный переход по регистру r1', что означает, что следующая инструкция для выполнения находится по адресу, хранящемуся в регистре r1. Адрес перехода неизвестен, пока инструкция не будет выполнена. Косвенные переходы так же могут зависеть от местонахождения в памяти.
Косвенный переход может весьма пригодиться для выполнения условного перехода, особенно это касается многовариантных переходов. К примеру, исходя из введённых в программу данных, значение может искаться в указателей кода для обработки различных вариантов в зависимости от значения данных.
Значение данных может добавляться к адресу таблицы, а результат сохраняться в регистре. Косвенный переход может быть выполнен исходя из значения этого регистра, эффективно соотнося программный контроль с кодом, соответствующим введённым данным.
Схожим образом инструкции вызова подпрограммы могут быть косвенными с адресом вызываемой подпрограммы, указанным в регистре или ячейке памяти.
Примеры на ассемблере {| | SPARC: ||jmpl %o7 |- | MIPS: ||jr $ra |- | X86: || |- | ARM: || |- | Itanium: ||br.ret.sptk.few rp |- | 6502: ||jmp ($0DEA) |- | 65C816: ||jsr ($0DEA,X) |- | Z80: ||jp (hl) |- | Intel 8080: ||pchl
См. также Команда перехода Ветвление
Категория:Управление потоком Категория:Машинный код