Epäsuora siirtyminen

epäsuora haara _ _ _ _ _ _ _ konekoodi . Sen sijaan, että määritettäisiin seuraavan suorituskäskyn osoite , kuten suorille hyppyille on tapana , tässä argumentti määrittää osoitteen sijainnin.

Tässä tapauksessa esimerkki olisi käsky, kuten "epäsuora hyppy rekisterissä r1", mikä tarkoittaa, että seuraava suoritettava käsky on rekisteriin r1 tallennetussa osoitteessa. Hyppyosoitetta ei tiedetä ennen kuin käsky on suoritettu. Epäsuorat hyppyt voivat myös riippua muistipaikasta .

Epäsuora hyppy voi olla erittäin hyödyllinen ehdolliseen haarautumiseen , erityisesti monipolkuhyppyihin. Esimerkiksi ohjelmaan syötettyjen tietojen perusteella arvo voidaan etsiä koodiosoittimien hyppytaulukosta , jolloin voidaan käsitellä erilaisia ​​vaihtoehtoja datan arvosta riippuen .

Taulukon osoitteeseen voidaan lisätä tietoarvo ja tulos tallentaa rekisteriin. Tämän rekisterin arvon perusteella voidaan tehdä epäsuora hyppy, jolloin syötettyä dataa vastaavalle koodille annetaan tehokkaasti ohjelmaohjaus.

Vastaavasti aliohjelman kutsukäskyt voivat olla epäsuoria, jolloin kutsutun aliohjelman osoite on määritelty rekisterissä tai muistipaikassa.

Esimerkkejä kokoonpanokielistä

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

Katso myös