Vad är ett stapelregister?
I relation till datorer är ett stapelregister ett minnesplats - vanligtvis på den centrala behandlingsenheten (CPU) eller relaterad bearbetningsmaskinvara - som har den aktuella adressen till toppen av ett område i separat datorminne som kallas stacken. Stackregistret är viktigt eftersom, utan det, skulle en dator behöva implementera en långsammare, mer felbenägen metod för att spåra flödet för körning av ett program. I de flesta systemarkitekturer är stackregistret ett dedikerat register så att det inte av misstag nås när du arbetar med andra minnesregister. Mer sällan kan ett stapelregister vara ett allmänt register som vanligtvis är tillgängligt för ett program men som avsiktligt inte används eftersom dess användning definieras av tillverkaren. När ett datorsystem innehåller två eller flera stackregister, vilket innebär att det finns fler än en stack, är arkitekturen känd som en stackmaskin.
På den lägsta nivån för datorprogrammering är en stapel ett minnesområde - vanligtvis i RAM-minne (random access) (RAM) - som har en väldefinierad typ av beteende. Bunten kan läggas till information i en process som kallas tryckning, eller den kan få information som hämtas från den, som kallas poppning. Modellen för en bunt är först-in, sen-ut, vilket innebär att om flera informationsdelar skjuts in i bunten, så kommer det första elementet som skjuts in att vara det sista som släpps ut, medan det sista elementet som skjuts in kommer att vara den första som hämtas med ett popkommando. Ett stapelregister håller koll på toppen av bunten, som alltid är den sista artikeln som skjuts in i den.
När ett datorprogram körs har varje instruktion som körs en specifik minnesadress där den tillfälligt lagras under programmets längd. Om ett program kallar en subroutine - eller en procedur, funktion eller metod, beroende på programmeringsspråket - måste programmet hoppa till minnesadressen för subroutine-koden för att köra den. Adressen där programstyrningsflödet bryts till grenen till subroutinen skjuts på bunten så att det kommer ihåg. När subroutinen har avslutat exekveringen, vet programmet vart det ska återvända i huvudkoden genom att knappa kodadressen från toppen av bunten, där stackregistret pekar.
Även om det finns andra metoder som kan användas för att uppnå samma resultat, med användning av en stack och stack register tillåter ett viktigt programmeringskoncept som kallas rekursion. En rekursiv funktion är en funktion som inom sin egen kod kallar sig själv. Denna process används vanligtvis i sorteringsalgoritmer och för vissa matematiska funktioner. Stackregistret håller reda på alla de sista adresserna där exekveringen förgrenar sig, så att en funktion säkert kan implementera rekursion med kunskapen att kontrollen så småningom kommer att återgå till ursprungspunkten. En komplikation inträffar om hela stacken blir full och inget utrymme i minnet återstår, i vilket fall ett stacköverskridande inträffar, vilket upphör med körningen av programmet.