Indirekt övergång

indirekt gren _ _ _ _ _ _ _ maskinkod . Istället för att specificera adressen till nästa instruktion att köra , som är vanligt för direkta hopp , anger argumentet här adressens plats.

I det här fallet skulle ett exempel vara en instruktion som "indirekt hopp i register r1", vilket betyder att nästa instruktion som ska exekveras är på adressen lagrad i register r1. Hoppadressen är inte känd förrän instruktionen exekveras. Indirekta hopp kan också bero på minnesplats .

Indirekt hopp kan vara mycket användbart för villkorlig förgrening , särskilt för flervägshopp. Till exempel, baserat på data som matats in i programmet, kan värdet slås upp i hopptabellen av kodpekare för att bearbeta olika alternativ beroende på värdet på datan .

Ett datavärde kan läggas till en tabelladress och resultatet lagras i ett register. Ett indirekt hopp kan göras baserat på värdet av detta register, vilket effektivt tilldelar programstyrning till koden som motsvarar den inmatade datan.

På liknande sätt kan subrutinanropsinstruktioner vara indirekta, med adressen för den anropade subrutinen specificerad i ett register eller minnesplats.

Assembly språkexempel

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

Se även