Непрямая ветвь (также известная как вычисленный скачок , косвенный переход и регистр косвенной скачка) представляет собой тип управление программы команд , присутствующие в некоторых машинном языке наборах команд . Вместо того, чтобы указывать адрес следующей инструкции для выполнения , как в прямом переходе , аргумент указывает, где находится адрес. Примером является 'косвенный переход на регистр r1', что означает, что следующая инструкция, которая должна быть выполнена, находится по адресу в регистре r1. Адрес для перехода неизвестен, пока инструкция не будет выполнена. Косвенные переходы также могут зависеть от значения ячейки памяти .
Непрямая ветвь может быть полезна для создания условной ветки , особенно многосторонней . Например, на основе ввода программы значение может быть найдено в таблице переходов указателей на код для обработки различных случаев, подразумеваемых значением данных. Значение данных может быть добавлено к адресу таблицы, а результат сохранен в регистре. Косвенный переход затем может быть выполнен на основе значения этого регистра, эффективно отправляя управление программой к коду, соответствующему входу.
Подобным образом инструкции вызова подпрограммы могут быть косвенными, с адресом вызываемой подпрограммы, указанным в памяти. Указатели функций обычно реализуются с помощью косвенных вызовов подпрограмм.
Непрямые ответвления были одной из поверхностей атаки Spectre . Для того, чтобы смягчить атаку GCC 8.1 введены следующие новые возможности: -mindirect-branch=
, -mfunction-return=
и -mindirect-branch-register
. [1] [номер 1]
Пример синтаксиса ассемблера
MSP430 : br r15
SPARC : jmpl %o7
MIPS : jr $ra
X86 (синтаксис AT&T): jmp *%eax
X86 (синтаксис Intel): jmp eax
ARM : mov pc, r2
Itanium (семейство x86): br.ret.sptk.few rp
6502 : jmp ($0DEA)
65C816 : jsr ($0DEA,X)
6809 : jmp [$0DEA]
,jmp B,X
,jmp [B,X]
6800 : jmp 0,X
Z80 : jp (hl)
Intel 8080 : pchl
IBM System z : bcr cond,r1
[2]RISC-V : jalr x0, 0(x1)
Смотрите также
Заметки
Рекомендации
- ^ Ларабель, Майкл (2018-01-14). «В GCC 8 добавлено средство защиты от Spectre, ищется обратный порт в GCC 7» . Архивировано 20 января 2018 года . Проверено 19 января 2018 .
- ^ «З / Архитектура - Принципы работы» (4-е изд.). IBM . Май 2004 [1990]. SA22-7832-03. Архивировано 4 марта 2016 года . Проверено 26 мая 2018 .