Nepřímé odvětví - Indirect branch

Nepřímá větev (také známý jako vypočítaný skok , nepřímým skok a registrech nepřímé skoku) je typ ovládacího programu návodu obsaženy v některých jazykových stroj instrukční sady . Namísto zadání adresy další instrukce, která seprovést , jako v přímé větvi , argument určuje, kde je adresa umístěna. Příkladem je „nepřímý skok na registru r1 “, což znamená, že další instrukce, která má být provedena, je na adrese v registru r1. Adresa, na kterou se má přeskočit, není známa, dokud není provedena instrukce. Nepřímé větve mohou také záviset na hodnotě umístění paměti .

Nepřímá větev může být užitečná pro vytvoření podmíněné větve , zejména vícesměrné větve . Například na základě vstupu do programu lze hodnotu vyhledat ve skokové tabulce ukazatelů na kód pro zpracování různých případů implikovaných datovou hodnotou. Dat hodnota by mohla být přidána na adresu stolu, s tím výsledkem, uložené v registru. Poté by mohl být proveden nepřímý skok na základě hodnoty tohoto registru, který efektivně odešle řízení programu do kódu vhodného pro vstup.

Podobným způsobem mohou být pokyny pro volání podprogramu nepřímé, přičemž adresa podprogramu, který má být vyvolán, je uvedena v paměti. Ukazatele funkcí jsou obvykle implementovány s nepřímými voláními podprogramů.

Jedním z útočných povrchů Spectra byly nepřímé větve . Zmírnit útok GCC 8.1 představil následující nové možnosti: -mindirect-branch=, -mfunction-return=a -mindirect-branch-register.

Příklad syntaxe assembleru

MSP430 :   br r15
SPARC :   jmpl %o7
MIPS :    jr $ra
X86 (AT&T Syntax):      jmp *%eax
X86 (Intel Syntax):      jmp eax
RAMENO :     mov pc, r2
Itanium (řada 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
RISC-V : jalr x0, 0(x1)

Viz také

Poznámky

Reference