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