Säikeistetty koodi on yksi tavoista toteuttaa virtuaalikone välivaiheessa ohjelmointikieliä tulkittaessa (yhdessä tavukoodin kanssa ). Joskus kirjallisuudessa tavataan myös termi silloitettu koodi .
Ohjelman pääasiallinen esitys ketjutettua koodia käytettäessä on joukko alirutiinikutsuja . Kierteitetyn koodin toteutus, tapa, jolla nämä puhelut tallennetaan, voi olla erilainen. Tämän koodin voi käsitellä tulkki (josta on tullut osoitteen tulkki ) tai se voi olla yksinkertainen konekäskysarja, joka kutsuu aliohjelmaa. Jotkut virtuaalikoneen perusalirutiinit, joissa käytetään säikeistettyä koodia, on toteutettu tavalliseen konekoodiin kirjoitettuina alirutiineina .
Säikeistetty koodi tunnetaan yleisimmin tekniikana, jota käytetään Forthin toteutuksessa . Sitä käytettiin kuitenkin myös B -ohjelmointikielen toteutuksessa ( C :n edeltäjä ). Sitä käytetään joskus myös BASIC- , COBOL- ja muiden ohjelmointikielten toteutuksessa.
Ommeltu koodi on suhteellisen kompakti verrattuna konekoodiin. Tämän edun kustannuksella on hidastuminen. Tässä tulee kuitenkin esiin synergistinen vaikutus - joskus kompakti koodi on pienempi ja huomattavasti nopeampi kuin tavallinen, säikeetön koodi [1] . Ohjelma, joka on tarpeeksi pieni mahtuakseen kokonaan RAM-muistiin, toimii nopeammin kuin ohjelma, joka käyttää virtuaalimuistia, johon kuuluu haku kiintolevyltä. Samoin ohjelma, joka mahtuu kokonaan prosessorin välimuistiin , toimii nopeammin .
Tällainen lankakoodi ei pohjimmiltaan eroa konekoodista . Tämä on sarja kutsuja jo käännetyille aliohjelmille.
Ohjelma näyttää tältä:
callSub1; callSub2; callSub3;
Tämä koodi saadaan aliohjelmasta, jos koodista poistetaan kutsut. Vain aliohjelmien osoitteet jäävät koodin runkoon. Aliohjelmien kutsuminen suoritetaan yksinkertaisimmalla osoitetulkin avulla, joka varaa useita konekäskyjä (joissain prosessoriarkkitehtuureissa yhden).
soita tulkki; AddrSub1; AddrSub2; ... addrEXIT; ... ... Tulkki: konekoodi, SEURAAVA ... Sub...: konekoodi, SEURAAVA ... EXIT: konekoodi, SEURAAVASuoraketjuisessa koodissa mikä tahansa määritelmä (esim. Sub) alkaa konekoodilla. Tulkin on tallennettava paluupinoon käskylaskurin mennyt arvo (tämä ei ole PC tai IP, vaan toinen, joka liikkuu Forth-koodin läpi) ja sen paluuosoitteen tulee olla ajan tasalla. Siitä tulee nyt uusi osoitin Forth-koodiin. Jotkut Intel x86 -versiot käyttävät SI-rekisteriä. Kun luet tämän rekisterin epäsuorassa osoitteessa olevaa tietoa, sen arvo muuttuu automaattisesti.
NEXT on sekvenssi, jota käytetään palautuksen sijaan. Jos täytämme Sub1:n, NEXT käyttää Forth-käskylaskuria, muuttaa sen koodin kooksi, ja seuraavassa vaiheessa ensimmäinen konekäsky Sub2:sta on jo suoritettu. Siirtymänopeus ei ole huonompi kuin paluu-kutsukomentoparin. Mutta NEXT-siirtymä erikoistuneessa prosessorissa voidaan suorittaa yhtenä käskynä.
EXIT - palauttaa ohjelmalaskurin edellisen arvon ja hyppää vastaavaan osoitteeseen.
Se eroaa suoraketjuisesta koodista siinä, että koodin runko ei ala kutsulla tulkille, vaan osoitteella, jossa tulkki sijaitsee.
AdrInterpretator; AddrSub1; AddrSub2; ... addrEXIT; ... ... Tulkki: Konekoodiosoite, konekoodi, SEURAAVA ... Sub...: Konekoodiosoite, konekoodi, SEURAAVA ... EXIT: Konekoodiosoite, konekoodi, SEURAAVAVoidaan käyttää esimerkiksi koodin koon pienentämiseen, kun se on ratkaisevan tärkeää. Se voi olla sekä suoraa että epäsuoraa. Aliohjelmien ja koodien suorien osoitteiden sijaan se käyttää niiden taitoksia, jotka ovat yleisesti ottaen näitä osoitteita lyhyempiä. 2-tavuisilla koodeilla voit käyttää osoiteavaruutta reilusti yli 64 kilotavua.
Joten jos tiedämme, että koodi ja tiedot ovat kohdistettu jonkin segmentin kokoon nähden (esimerkiksi 16 tavua), voimme käyttää fyysistä osoitetta jaettuna 16:lla taitettuna osoitteena.
Joissakin tapauksissa osoitetaulukkoa voidaan käyttää taittamiseen. Ommeltu koodi on osoitteen sijainti taulukossa. Tulkki lukee tämän koodin taulukosta ja hyppää oikeaan osoitteeseen.
Tavukoodia voidaan pitää erikoistapauksena taitetusta koodista, jossa on osoitetaulukko.