I databehandling er et batteri (på engelsk stack ) en datastruktur basert på "last in, first out" -prinsippet (engelsk LIFO for last in, first out ), som betyr at generelt det siste elementet, lagt til stack, vil være den første som går ut.
De fleste mikroprosessorer administrerer naturlig en stabel for rutinemessige samtaler. Det tilsvarer da et område av minnet, og prosessoren beholder adressen til det siste elementet.
I 32-biters x86- arkitekturen brukes ESP- registeret til å indikere adressen til toppen av en bunke i RAM . Den presse og pop opcodes tillate data som skal stables og unstacked hhv. De ringe og RET opcodes bruke stabelen å kalle en funksjon og deretter avslutte det, tilbake til undervisningen umiddelbart etter samtalen.
I tilfelle avbrudd stables EFLAGS-, CS- og EIP-registerene automatisk. I tilfelle en endring av prioritetsnivået under avbruddet, er også SS- og ESP-registerene.
Det finnes en annen stabel i x86-prosessorer, den til Floating Computing Unit (FPU). Mer presist, denne enheten bruker et batteri begrenset til 8 celler, og hvis drift ligner på et fat.
Elementet til det nåværende fatet heter st (0), de følgende elementene st (N) med N mellom 1 og 7. Denne stabelen gjør det mulig å utføre beregninger på en måte som en manuell kalkulator ved å stable verdiene, deretter ved å for eksempel å bruke en operasjon på de siste stablede verdiene.
Noen prosessorer bruker ikke et generisk register , bare stabelen. Instruksjonene gjelder deretter de første elementene. For eksempel kalkulatorer Hewlett-Packard , prosessorer Focus eller mekaniske Burroughs- serien B 5000 . Instruksjonene blir da ofte kortere, fordi de ikke trenger å referere til registre. Den Java språket bytecode bruker også dette trikset.
I de fleste kompilerte programmeringsspråk er utførelsesstakken der noen eller alle parametrene for anropsrutiner er stablet . I tillegg lager vi et rom for lokale variabler . Batteriet er således dannet stabelrammer (på engelsk stabelrammer ) som omfatter for hver rutine som er nestet samtale, dets parametere, dets lokale variabler og returpunkt.
Noen språk, for eksempel PostScript fra Adobe eller kontroll dc Unix , implementerer en stakkmekanisme (med omvendt polsk notasjon ) for beregninger.
Her er primitivene som ofte brukes til å manipulere stabler. Det er ingen standardisering for primitiver med stabelmanipulering. Navnene deres er derfor angitt uformelt. Bare de tre første er veldig essensielle, de andre kan trekkes ut av det.
Denne implementeringen er den som brukes i prosessorer - den er enkel og stabelen tar liten plass. En implementering i form av en koblet liste er også mulig for programmer.
algoritmer '''Classe Pile''' Attributs : pile : tableau[1, MAX] de Objet sommet : entier ''{indice du dernier element entre}'' Methodes Mprocédure '''PUSH'''(element) ''{entre un element (Objet)}'' Mfonction '''POP'''() retourne Objet ''{sort un Objet}'' ''{non données ici}'' Mfonction '''FULL'''() retourne booleen ''{la pile est-elle pleine ? (retourne sommet >= MAX)}'' Mfonction '''EMPTY'''() retourne booleen ''{la pile est-elle vide ? (retourne sommet <= 0)}'' Mfonction '''SIZE'''() retourne entier ''{retourne le nombre d'elements (retourne sommet)} Mprocedure '''INIT'''() ''{constructeur (met sommet à 0)} '''Mprocédure''' ''PUSH'' (element) ''{ajouter un élément sur la pile}'' Paramètres : (D) element : Objet (D/R) cible : Pile Début Si cible.sommet <= MAX Alors cible.sommet <- cible.sommet + 1 cible.pile[cible.sommet] <- element Sinon afficher("Pile pleine") Fsi Fin '''Mfonction''' ''POP'' () retourne objet ''{enlever un élément de la pile et le renvoyer}'' Paramètres : (D/R) cible : Pile Variables : Element : objet Début Si cible.sommet > 0 Alors Element <- cible.pile[cible.sommet] cible.sommet <- cible.sommet - 1 Sinon afficher("Pile vide") Fsi Retourner Element Fin