Kas yra „Stack / Stack Pointer“: tipai ir jo taikymai

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Stekas yra ne kas kita, o linijinė duomenų struktūra, kur įterpimas ir ištrynimas vyksta tik viename gale. Įterpimo operacija turi specialų pavadinimą, vadinamą PUSH, o ištrinimo operacija taip pat turi specialų pavadinimą, vadinamą POP. „PUSH“ ir „POP“ yra dvi pagrindinės operacijos, kurias buvo galima atlikti tik tam tikrame rietuve. Tai atminties vietų grupė, o atminties vietos yra susijusios arba su skaitymo, arba su rašymo atmintimi. Tai naudojama kaupiant dvejetainę informaciją vykdant programą, kai vykdome bet kurią programą, tada tos programos turinys bus saugomas rietuvėje. Iš to seka Paskutinis pirmas išėjimas (LIFO) ir jis naudojamas tik duomenims saugoti ir gauti, bet nenaudojamas duomenims saugoti. Trumpas kamino / kamino žymeklio paaiškinimas aptariamas toliau.

Kas yra „Stack / Stack Pointer“?

Apibrėžimas: Šūsnis yra saugojimo įrenginys, naudojamas informacijai ar duomenims saugoti LIFO („Last In First Out“) būdu. Kai įvedame duomenis LIFO būdu, elementas, kurį pirmiausia reikia ištrinti, yra paskutinis įterpimo elementas, taigi pirmiausia pašalinamas paskutinis įterptas elementas. Tai adresų registro atminties blokas, vadinamas „stack pointer“ (SP). Stekos žymeklis visada nurodo viršutinį rietuvės elementą, o tai reiškia, kurioje vietoje reikia įterpti duomenis.




Krūvos tipai

Yra dviejų tipų kaminai: jie yra registrų ir atminties kaminai.

Registruokis kaminą

Registrų kaupimas taip pat yra atminties įrenginys, esantis atminties įrenginyje, tačiau jis tvarko tik nedidelį duomenų kiekį. Kamino gylis visada yra ribotas, nes registro kamino dydis yra labai mažas, palyginti su atmintimi.



„Stumti operaciją į registrą“

1 žingsnis: Kamino rodyklė didėja 1.

SP ← SP + 1


2 žingsnis: Įveskite duomenis į rietuvę.

1000 [SP] ← KT

Kur DR yra duomenų registras

3 žingsnis: Patikrinkite, ar kaminas pilnas, ar ne

jei (sp = 0) tada (pilnas ← 1)

4 žingsnis: Pažymėti ne tuščią

tuščia ← 0

„Pop“ operacija registrų krūvoje

1 žingsnis: Skaityti duomenis iš rietuvės.

DR ← M [SP]

2 žingsnis: Mažinimo kamino taškas.

SP ← SP-1

3 žingsnis: Patikrinkite, ar kaminas tuščias, ar ne

jei sp = 0, tada tuščia ← 1

64 bitų registrų kamino krūvelių organizavimas parodytas žemiau esančiame paveikslėlyje.

Registruokite kamino organizavimą

Registruokite kamino organizavimą

Atminties paketas

Atminties šūsnyje kamino gylis yra lankstus. Tai užima daug atminties duomenų, tuo tarpu registrų kaupinyje bus saugomas tik ribotas skaičius atminties žodžių.

„Stumti“ operaciją atminties kortelėje

1 žingsnis: SP ← SP-1

2 žingsnis: 1000 [SP] ← KT

Pop operacija „Memory Stack“

1 žingsnis: DR ← M [SP]

2 žingsnis: SP ← SP-1

Palyginkite su registro vienetu, atminties įrenginyje saugoma daug duomenų. Atminties kamino paveikslas parodytas žemiau esančiame paveiksle.

Atminties paketas

Atminties paketas

Bendras atminties blokas yra padalintas į tris dalis, pirmasis atminties blokas turi programą (tik instrukcijos), antroji dalis yra duomenys (operandai), o trečioji - rietuvė. Programos instrukcijos visada saugomos programų skaitiklyje (PC), duomenų registrai identifikuojami pagal adresų registrą (AR). Adresas nuo 3000 iki 4001, naudojamas rietuvei, ir pirmasis elementas ar elementas saugomas 4001.

Stack / Stack Pointer 8085 mikroprocesoriuje

Programuotojo vaizdas 8085 m mikroprocesorius yra bendrosios paskirties registrai ir specialios paskirties registrai . Bendrosios paskirties registrai yra A, B, C, D, E, H, L, o specialiosios paskirties registrai yra SP („Stack Pointer“) ir PC („Program Counter“). 8085 mikroprocesoriaus programuotojo vaizdas parodytas žemiau esančiame paveikslėlyje.

Programuotojo vaizdas iš 8085 m

Programuotojo vaizdas iš 8085 m

„Stack pointer“ yra 16 bitų registras, kuriame yra atminties adresas, tarkime, kad „stack pointer“ (SP) turinys yra FC78H, tada mikroprocesorius 8085 jį interpretuoja. Atminties vietose yra naudingos informacijos nuo FC78H iki FFFH, o nuo FC77H iki 0000H - atminties vietoje nėra naudingos informacijos. Kamino žymeklio interpretacija parodyta žemiau esančiame paveikslėlyje.

„Stack Pointer“ interpretacija

„Stack Pointer“ interpretacija

Pagrindinės „Stack / Stack Pointer“ operacijos

Yra dvi kamino operacijos, kurios yra: PUSH operacija ir POP operacija.

PUSH operacija

PUSH reiškia elemento stūmimą ar įterpimą į kaminą. PUSH operacija visada padidina rietuvės rodyklę, o POP operacija - rietuvės rodyklę. Stumimo operacijos atveju turime patikrinti, ar yra laisvos vietos, ar nėra. Jei yra laisvos vietos, galime pereiti į stūmimo operaciją, jei laisvos vietos nėra, atsiranda klaidos pranešimas, kuris yra perpildytas. Perpildymas turi būti patikrintas atitinkamai stumiant. Pagrindinė „push and pop“ operacija parodyta žemiau esančiame paveikslėlyje.

Pagrindinis PUSH ir POP veikimas

Pagrindinė PUSH ir POP operacija

(A) paveikslas yra kaminas. Jei norite stumti elementą, kuris įterpia elementą į kaminą, turite stumti (s, a), kur „s“ yra ne kas kita, o kaminas. Šūsnyje dedame elementą „a“ ir ši operacija parodyta b paveiksle. Žr. Paveikslą (3), tarkime, kad rietuvėje yra trys elementai a, b, c, o rietuvė užpildyta elementu.

Jei norite įterpti ketvirtą elementą „d“ naudodami „push“ (s, d), bet nėra vietos elementui įterpti, tai rodo, kad kaminas perpildytas. Perpildymo terminologija naudojama, kai kaminas yra pilnas, o stūmimo operacijos algoritmas parodytas žemiau.

stumti (kaminas [], viršus, maks. kaminas, elementas)

jei (viršuje == maxstack-1)

{

spausdinti „perpildymą“

}

Kitas

{

viršuje = viršuje + 1

kamino [viršuje] = daiktas

}

galas

POP operacija

POP reiškia elemento ištrynimą kamino viršuje. „Pop“ operacijos atveju turime patikrinti, ar kaminas iš pradžių yra tuščias, ar ne. Jei kaminas iš pradžių yra tuščias, įvyksta perpildymo situacija. Tarkime, kad rietuvė tuščia, bet jūs vis dar norite iššokti elementus į rietuvę, tačiau rietuvėje nėra jokių elementų.

Atitinkamai, ar veikia pop, reikia patikrinti, ar nėra srauto. „Pop“ operacijoje, neatsižvelgiant į tai, koks viršuje yra viršutinis elementas, kurį reikia iššokti ar ištrinti, todėl nereikia minėti, kuris elementas bus iššokęs, pagal numatytuosius nustatymus bus rodomas aukščiausias elementas. Pop operacijos algoritmas parodytas žemiau.

pop (kamino [], viršuje, elementas)

jei (viršuje == - 1)

{

spausdinti „perpildymą“

}

Kitas

{

elementas = kaminas [viršuje]

top = top-1

}

Pavyzdys

Elementai įterpiami tokia tvarka kaip A, B, C, D, E, tai reiškia penkių elementų šūsnį. Paveiksle (a) norime stumti „A“ elementą ant kamino, tada viršus tampa nulis (viršus = 0), panašiai kaip viršus = 1, kai stumiamas „B“ elementas, viršuje = 2, kai elementas „C“ stumiama, viršuje = 3, kai stumiamas „D“ elementas, ir viršuje = 4, kai stumiamas „E“ elementas.

Taigi bet kokie mano paimti elementai dedami į kaminą, dabar kaminas pilnas. Jei norite stumti kitą elementą, kaminoje nėra vietos, todėl tai rodo perpildymą. Dabar kaminas yra pilnas, jei norite iššokti, pirmiausia reikia ištrinti elementą „E“. Stūmimo operacija parodyta žemiau esančiame paveikslėlyje.

„Push“ valdymas

„Push“ valdymas

Norėdami ištrinti kamino elementus, turime naudoti „pop“ operaciją. Taigi tiesiog paminėkite pop (), nerašykite argumentų pop, nes pagal nutylėjimą jis ištrina viršutinį elementą. Pirmasis „E“ elementas išbraukiamas po kito „D“ elemento ... „A“. Ištrinant viršutinius elementus, viršutinė vertė mažėja. Kai viršus = -1, rietuvė rodo nepakankamą srautą. Pop operacija parodyta paveikslėlyje žemiau.

POP operacija

POP operacija

Taigi tai yra paaiškinimas, kaip elementai įterpiami ir ištrinami iš rietuvės naudojant „push and pop“ operaciją.

Programos

„Stack / stack pointer“ programos yra

  • Stygų pakeitimas
  • Subalansuotas skliaustai
  • ATŠAUKTI / PIRŠTAS
  • Sistemos kaminas aktyvinimo įrašams
  • Infiksas, priešdėlis, postfiksas, posakis

DUK

1). Kas yra rietuvės rodyklė rankoje?

„Stack pointer register“ (R13) naudojamas kaip rodyklė į ARM aktyvųjį rietuvę.

2). Kodėl kamino rodyklė yra 16 bitų?

„Stack pointer“ (SP) ir programų skaitiklis (PC), naudojami ankstesnei vietai išsaugoti, o atminties vietos adresas yra 16 bitų, taigi „stack pointer“ (SP) taip pat yra 16 bitų.

3). Koks yra „stack stacker“ vaidmuo?

„Stack pointer“ (SP) vaidmuo yra nurodyti viršuje esančio elemento viršų.

4). Kuris kaminas naudojamas 8085 m.

Šaknis, naudojamas 8085 m., Yra „Last In First Out“ (LIFO).

5). Ar kamino žymeklis yra registras?

Taip, kamino žymeklis (SP) yra adresų registras, kuris visada nurodo viršuje esančio elemento viršų.

Šiame straipsnyje kas yra