Mi a Stack / Stack Pointer: típusai és alkalmazásai

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





A verem nem más, mint a lineáris adatstruktúra, ahol a beszúrás és a törlés csak az egyik végén megy végbe. A beillesztési műveletnek speciális neve PUSH, a törlési műveletnek pedig POP néven is van speciális neve. A PUSH és a POP két alapvető művelet, amelyet csak egy adott veremben lehet végrehajtani. Ez a memóriahelyek egy csoportja, és a memóriahelyek vagy az olvasási, vagy az írási memóriához kapcsolódnak. Ezt bináris információk tárolására használják a program végrehajtása során, amikor bármilyen programot végrehajtunk, akkor a program tartalma a veremben lesz tárolva. Ebből következik Utoljára be, elsőként ki (LIFO) és csak az adatok tárolására és visszakeresésére szolgál, de nem az adatok tárolására szolgál. A verem / verem mutató rövid magyarázatát az alábbiakban tárgyaljuk.

Mi az a Stack / Stack Pointer?

Meghatározás: A verem egy tárolóeszköz, amelyet információk vagy adatok tárolására használnak a LIFO (Last In First Out) módon. Amikor az adatokat LIFO formában adjuk meg, az az elem, amelyet először törölni kell, az utolsó beillesztő elem, tehát az utolsó beillesztett elem kerül előbb. Ez a memóriaegység a címjegyzékben, az úgynevezett veremmutató (SP). A veremmutató mindig jelzi a verem legfelső elemét, ami azt jelenti, hogy az adatokat melyik helyre kell beszúrni.




Verem típusai

Kétféle halom létezik, ezek a regisztráció és a memória verem.

Verem regisztrálása

A regisztrációs verem egyben a memóriaegységben lévő memóriaeszköz, de csak kis mennyiségű adatot kezel. A verem mélysége mindig korlátozott a regiszter veremben, mert a regiszter verem mérete nagyon kicsi a memóriához képest.



Nyomja meg a műveletet a regisztrációs veremben

1. lépés: A veremmutató 1-gyel növekszik.

SP ← SP + 1


2. lépés: Írja be az adatokat a verembe.

1000 [SP] ← CT

Ahol a DR az adatregiszter

3. lépés: Ellenőrizze, hogy a verem megtelt-e vagy sem

if (sp = 0), akkor (teljes ← 1)

4. lépés: Mark nem üres

üres ← 0

Pop művelet a nyilvántartási veremben

1. lépés: Adatok olvasása a veremből.

DR ← M [SP]

2. lépés: Csökkenő verempont.

SP ← SP-1

3. lépés: Ellenőrizze, hogy a verem üres-e vagy sem

ha sp = 0, akkor üres ← 1

A 64 bites regiszterverem veremszervezése az alábbi ábrán látható.

Regisztrálja a veremszervezetet

Regisztrálja a veremszervezetet

Memóriakészlet

A memória veremben a verem mélysége rugalmas. Nagy mennyiségű memória foglal helyet, míg a regiszter veremben csak véges számú memória szó lesz tárolva.

Nyomja meg a műveletet a memóriakészletben

1. lépés: SP ← SP-1

2. lépés: 1000 [SP] ← CT

Pop művelet a Memory Stackben

1. lépés: DR ← M [SP]

2. lépés: SP ← SP-1

Összehasonlítva a regisztrációs egységgel, a memóriaegység nagy mennyiségű adatot tárol. A memóriahalmaz ábráját az alábbi ábra mutatja.

Memóriakészlet

Memóriakészlet

A teljes memóriaegység három részre oszlik, az első memóriaegységen van a program (semmi, csak az utasítások), a második rész adat (operandus), a harmadik része verem. A programutasítások mindig a programszámlálóban (PC) tárolódnak, az adatregisztereket a címregiszter (AR) azonosítja. A veremhez használt 3000–4001 cím és az első elem vagy elem a 4001-en tárolódik.

Verem / verem mutató 8085 mikroprocesszorban

A programozó nézete 8085 mikroprocesszor általános célú regisztereket tartalmaz és speciális célú nyilvántartások . Az általános célú regiszterek: A, B, C, D, E, H, L, a speciális célú regiszterek pedig az SP (Stack Pointer) és a PC (Program Counter). A 8085 mikroprocesszor programozó nézete az alábbi ábrán látható.

Programozói nézet 8085

Programozói nézet 8085

A veremmutató egy 16 bites regiszter, amely memóriacímet tartalmaz, tegyük fel, hogy a veremmutató (SP) tartalma FC78H, majd a 8085 mikroprocesszor értelmezi. A memóriahelyek hasznos információkkal rendelkeznek az FC78H-tól az FFFH-ig, az FC77H-tól az 0000H-ig pedig a memóriahelyek nem tartalmaznak hasznos információkat. A veremmutató értelmezését az alábbi ábra mutatja.

Stack Pointer értelmezése

Stack Pointer értelmezése

A Stack / Stack Pointer alapműveletei

A veremnek két művelete van: PUSH művelet és POP művelet.

PUSH művelet

A PUSH azt jelenti, hogy egy elemet tolunk vagy helyezünk a verembe. A PUSH művelet mindig növeli a veremmutatót, a POP művelet pedig mindig a veremmutatót. Nyomási művelet esetén ellenőriznünk kell, hogy van-e szabad hely vagy sem. Ha van szabad hely, akkor léphetünk a tolási művelethez, ha nincs szabad hely, akkor hibaüzenet jelenik meg, amely túlcsordult. A túlfolyást ellenőrizni kell tolás esetén. A push and pop alapvető műveleteit az alábbi ábra mutatja.

A PUSH és a POP alapművelete

A PUSH és a POP alapművelete

Az (a) ábra a verem. Ha azt az elemet akarja betolni, amely az elemet beilleszti a verembe, akkor meg kell nyomnia (s, a), ahol az ’s’ nem más, mint egy verem. A veremben elhelyezzük az ’a’ elemet, és ezt a műveletet a (b) ábra mutatja. Lásd a (3) ábrát. Tegyük fel, hogy a verem három elemet tartalmaz: a, b, c, és a verem tele van egy elemmel.

Ha be akar illeszteni egy negyedik elemet (‘d’) a push (s, d) használatával, de nincs szabad hely az elem beillesztésére, az azt jelzi, hogy a verem túlcsordult. A túlcsordulási terminológiát akkor használják, ha a verem megtelt, és a tolási művelet algoritmusa az alábbiakban látható.

tolás (verem [], felső, max. verem, elem)

if (top == maxstack-1)

{

„túlcsordulás” nyomtatása

}

más

{

top = top + 1

verem [top] = elem

}

vége

POP művelet

A POP az elem törlését jelenti a verem tetején. Pop művelet esetén ellenőriznünk kell, hogy a verem kezdetben üres-e vagy sem. Ha a verem kezdetben üres, akkor alulcsordulási helyzet áll elő. Tegyük fel, hogy a verem még mindig üres, és el akarja dobni az elemeket a veremben, de a veremben nincsenek elemek, így az alulcsorduláshoz vezet.

Az alulfolyást ellenőrizni kell pop működés esetén. Pop műveletnél bármi is legyen a legfelső elem a veremben, amelyet ki kell dobni vagy törölni kell, ezért nem kell megemlíteni, melyik elem jelenik meg, alapértelmezés szerint a legfelső elem jelenik meg. A pop művelet algoritmusa az alábbiakban látható.

pop (verem [], felső, elem)

ha (top == - 1)

{

„alulcsordulás” nyomtatása

}

más

{

item = verem [top]

top = top-1

}

Példa

Az elemek A, B, C, D, E sorrendben kerülnek beillesztésre, ez öt elem halmát jelöli. Az (a) ábrán az 'A' elemet akarjuk tolni a veremre, majd a teteje nulla lesz (felső = 0), hasonlóan a felső = 1, amikor a 'B' elemet tolják, a felső = 2, amikor a 'C' elem tolódik, top = 3, amikor a „D” elemet tolják, és top = 4, ha az „E” elemet tolják.

Tehát bármi is legyen az általam vett elem a veremben, most a verem megtelt. Ha másik elemet akar tolni, akkor nincs hely a veremben, így ez jelzi a túlcsordulást. Most megtelt a verem, ha fel akarja dobni az „E” elemet először törölni kell. A tolási műveletet az alábbi ábra mutatja.

Nyomási művelet

Nyomási művelet

A pop műveletet kell használnunk a verem elemeinek törlésére. Tehát csak említsd meg a pop () -t, ne írj argumentumokat a popba, mert alapértelmezés szerint ez törli a felső elemet. Az első „E” elem törlődik a következő „D” elemről ... Amikor a legfelső elemek törlődnek, a felső érték csökken. Amikor felső = -1, a verem alulcsordulást jelez. A pop műveletet az alábbi ábra mutatja.

POP művelet

POP művelet

Tehát ez a magyarázat arra, hogy az elemeket hogyan lehet beilleszteni és törölni a verembe a push és pop műveletek segítségével.

Alkalmazások

A verem / verem mutató alkalmazásai a következők

  • Karakterlánc megfordítása
  • Kiegyensúlyozott zárójel
  • UNDO / FINGER
  • Rendszerköteg az aktiválási rekordok számára
  • Infix, előtag, utótag, kifejezés

GYIK

1). Mi a verem mutató a karban?

A verem mutató regiszter (R13) az ARM aktív veremének mutatójaként használható.

2). Miért verem mutató 16 bites?

A veremmutató (SP) és a programszámláló (PC), amelyek az előző hely és a memóriahely cím tárolására szolgálnak, 16 bit, tehát a veremmutató (SP) is 16 bites.

3). Mi a veremmutató szerepe?

A veremmutató (SP) szerepe az, hogy az elem tetejét jelezze a veremben.

4). Melyik verem használt 8085-ben?

A 8085-ben használt verem a Last In First Out (LIFO).

5.) A veremmutató regiszter?

Igen, a veremmutató (SP) egy címregiszter, amely mindig az elem tetejét jelzi a veremben.

Ebben a cikkben mi van