Wheeler jump

Fra Wikipedia, den frie encyklopædi
Spring til navigation Spring til søgning

Et wheeler jump er en tidlig implementering af en subrutine/funktion på en computer, der ikke besidder en instruktion til at gemme den adresse, der skal returneres til, når subrutinen afsluttes. Et wheeler jump skal kodes i maskinkode eller assembler, da man skal kunne bestemme adresserne nøjagtigt. Der er tale om selvmodificerende kode. Subrutiner implementeret ved et wheeler jump tillader ikke rekursion.

En subrutine er et stykke programkode, der udfører en eller flere opgaver, og som med fordel kan benyttes flere steder i programmet. I stedet for at gentage programkoden hver gang opgaven skulle udføres, udføres et kald til subrutinen, opgaven udføres, og subrutinen returnerer derpå til instruktionen lige efter det oprindelige kald. (I nogle tilfælde vil man i stedet have instruktionerne gentaget hver gang, da dette udføres en smule hurtige end subrutinekaldet. Til gengæld er bruget af lager noget større.) Men mange af de tidligste computere havde simpelt hen ikke en instruktion til at gemme returadressen og kunne derfor ikke uden videre benytte subrutiner, da man indså det fornuftige i dem. Dette råder wheeler jumpet bod på.

Når subrutinen skal kaldes, læses adressen for kaldet ind i et af maskinens registre. Har man ikke andre muligheder, vil man benytte akkumulatoren. Derefter udføres et hop til adressen for subrutinens begyndelse. Som det første skal subrutinen nu danne hoppet til sin returadresse. Efter de instruktioner, der udgør subrutinens egentlige krop, er afsat en adresse, der indeholder en dummy, der kan være hvad som helst, bare det har længden svarende til et ubetinget hop. Subrutinen starter med at addere længden af en hop-instruktion til adressen i akkumulatoren. Nu indeholder akkumulatoren så adressen, der skal returneres til. Derpå overlejres adressen i akkumulatoren med en ubetinget hop-instruktion. Endelig skrives indholdet af akkumulatoren ned i den lageradresse, der indeholder dummyen. Derefter kan subrutinen udføre sine egentlige opgaver. Når de er udført, når maskinen frem til det ubetingede hop tilbage til hovedprogrammet og returnerer.

Wheeler jumpet blev opfundet af den britiske datapioner David Wheeler under arbejdet på EDSAC omkring 1950. Efterfølgende har stort set alle computere haft egentlige subrutinekald i deres instruktionssæt, hvorved dette trick blev overflødigt.

Eksterne henvisninger[redigér | redigér wikikode]