Hva er et stableregister?
I forhold til datamaskiner er et stabelregister et minneplass - vanligvis på den sentrale prosesseringsenheten (CPU) eller beslektet prosesseringsmaskinvare - som har den gjeldende adressen til toppen av et område i separat datamaskinminne kjent som stabelen. Stabelregisteret er viktig fordi en datamaskin uten det ville trenge å implementere en tregere, mer feilutsatt metode for å spore gjennomføringsflyten av et program. I de fleste systemarkitekturer er stabelregisteret et dedikert register, slik at det ikke kommer tilfeldig til når du arbeider med andre hukommelsesregistre. Mer sjelden kan et stabelregister være et generelt register som vanligvis er tilgjengelig av et program, men som med vilje ikke blir brukt fordi bruken er definert av produsenten. Når et datasystem inneholder to eller flere stabelregistre, noe som betyr at det potensielt er mer enn en stabel, er arkitekturen kjent som en stakemaskin.
På det laveste nivået av dataprogrammering er en stabel et minneområde - vanligvis i tilfeldig minneminne (RAM) - som har en veldefinert type oppførsel. Bunken kan ha informasjon lagt til den i en prosess som kalles pushing, eller den kan få informasjon hentet fra den, som kalles popping. Modellen for en stabel er først inn, sist ut, noe som betyr at hvis flere informasjonsstykker skyves inn i stabelen, så vil det første elementet som skyves inn, være det siste som sprettes ut, mens det siste elementet som skyves inn vil være den første som blir hentet med en popkommando. Et stableregister holder oversikt over toppen av bunken, som alltid er den siste gjenstanden som skyves inn i den.
Når et dataprogram kjøres, har hver instruksjon som utføres en spesifikk minneadresse der den midlertidig lagres i løpet av programmet. Hvis et program kaller en subroutine - eller en prosedyre, funksjon eller metode, avhengig av programmeringsspråk - må programmet hoppe til minneadressen til subroutine-koden for å utføre den. Adressen der programstyrestrømmen brytes til grenen til subroutinen skyves inn på bunken slik at den huskes. Når subroutinen er fullført, vet programmet hvor det skal returnere i hovedkoden ved å hoppe kodeadressen fra toppen av bunken, der stableregisteret peker.
Selv om det er andre metoder som kan brukes for å oppnå de samme resultatene, er det mulig å bruke et stabel- og stabelregister for et viktig programmeringskonsept kjent som rekursjon. En rekursiv funksjon er en funksjon som innenfor sin egen kode kaller seg selv. Denne prosessen brukes ofte i sorteringsalgoritmer og for visse matematiske funksjoner. Stabelregisteret holder oversikt over alle de siste adressene der utførelsen forgrener seg, slik at en funksjon trygt kan implementere rekursjon med visshet om at kontrollen til slutt vil komme tilbake til opprinnelsesstedet. En komplikasjon oppstår hvis hele bunken blir full og det ikke blir igjen rom i minnet, i hvilket tilfelle det oppstår et bunnoverløp, og slutter utførelsen av programmet.