Indirekte overgang

indirekte gren _ _ _ _ _ _ _ maskinkode . I stedet for at specificere adressen på den næste instruktion til at udføre , som det er sædvanligt for direkte spring , specificerer argumentet her adressens placering.

I dette tilfælde ville et eksempel være en instruktion som 'indirekte hop i register r1', hvilket betyder, at den næste instruktion, der skal udføres, er på adressen gemt i register r1. Springadressen er ikke kendt, før instruktionen er udført. Indirekte spring kan også afhænge af hukommelsesplacering .

Indirekte spring kan være meget nyttigt til betinget forgrening , især for multi-path jumps. For eksempel, baseret på de data, der er indtastet i programmet, kan værdien slås op i springtabellen af kodepointere for at behandle forskellige muligheder afhængigt af værdien af ​​dataene .

En dataværdi kan tilføjes til en tabeladresse og resultatet gemmes i et register. Et indirekte spring kan foretages baseret på værdien af ​​dette register, hvilket effektivt tildeler programstyring til den kode, der svarer til de indtastede data.

Tilsvarende kan subrutineopkaldsinstruktioner være indirekte, med adressen på den kaldte subrutine specificeret i et register eller en hukommelsesplacering.

Eksempler på forsamlingssprog

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 også