Kas ir Stack / Stack Pointer: veidi un tā pielietojums

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Steks nav nekas cits kā lineārā datu struktūra, kur ievietošana un dzēšana notiek tikai vienā galā. Ievietošanas operācijai ir īpašs nosaukums, kas pazīstams kā PUSH, un dzēšanas operācijai ir arī īpašs nosaukums, kas pazīstams kā POP. PUSH un POP ir divas pamatdarbības, kuras varēja veikt tikai noteiktā kaudzē. Tā ir atmiņas vietu grupa, un atmiņas vietas ir saistītas vai nu ar lasāmo, vai ar rakstāmo atmiņu. To izmanto binārās informācijas glabāšanai programmas izpildes laikā, kad mēs izpildām jebkuru programmu, tad šīs programmas saturs tiks glabāts kaudzē. Tas seko Last In First Out (LIFO), un to izmanto tikai datu glabāšanai un izgūšanai, bet neizmanto datu glabāšanai. Tālāk ir aplūkots īss kaudzes / kaudzes rādītāja skaidrojums.

Kas ir Stack / Stack Pointer?

Definīcija: Steks ir atmiņas ierīce, ko izmanto informācijas vai datu glabāšanai LIFO (Last In First Out) veidā. Ikreiz, kad datus ievadām LIFO veidā, vispirms jāizdzēš elements ir pēdējais ievades elements, tāpēc pēdējais ievietotais tiek izņemts vispirms. Tā ir atmiņas vienība adrešu reģistrā, ko sauc par kaudzes rādītāju (SP). Steka rādītājs vienmēr norāda kaudzes augšējo elementu, kas nozīmē, kurā vietā dati jāievieto.




Skursteņa veidi

Ir divu veidu kaudzes, tās ir reģistru kaudze un atmiņas kaudze.

Reģistrēt skursteni

Reģistru kaudze ir arī atmiņas ierīce, kas atrodas atmiņas blokā, taču tā apstrādā tikai nelielu datu daudzumu. Steka dziļums vienmēr ir ierobežots reģistra kaudzē, jo reģistra kaudzes izmērs ir ļoti mazs, salīdzinot ar atmiņu.



Push darbība reģistrācijas kaudzē

1. solis: Steka rādītājs palielinās par 1.

SP ← SP + 1


2. solis: Ievadiet datus kaudzē.

1000 [SP] ← CT

Kur DR ir datu reģistrs

3. solis: Pārbaudiet, vai kaudze ir pilna vai nav

ja (sp = 0), tad (pilns ← 1)

4. solis: Atzīmēt nav tukšs

tukšs ← 0

Popoperācija reģistru kaudzē

1. solis: Lasīt datus no kaudzes.

DR ← M [SP]

2. solis: Samazināšanas kaudzes punkts.

SP ← SP-1

3. solis: Pārbaudiet, vai kaudze ir tukša

ja sp = 0, tad tukšs ← 1

64 bitu reģistra skursteņa kaudzes organizācija ir parādīta zemāk redzamajā attēlā.

Reģistrēt kaudzes organizāciju

Reģistrēt kaudzes organizāciju

Atmiņas kaudze

Atmiņas kaudzē kaudzes dziļums ir elastīgs. Tas aizņem lielu atmiņas datu daudzumu, turpretī reģistra kaudzē tiks saglabāts tikai ierobežots skaits atmiņas vārdu.

Push darbība atmiņas kaudzē

1. solis: SP ← SP-1

2. solis: 1000 [SP] ← CT

Pop darbība atmiņas kaudzē

1. solis: DR ← M [SP]

2. solis: SP ← SP-1

Salīdzinot ar reģistra vienību, atmiņas vienība saglabā lielu datu apjomu. Atmiņas kaudzes attēls ir parādīts zemāk redzamajā attēlā.

Atmiņas kaudze

Atmiņas kaudze

Kopējā atmiņas vienība ir sadalīta trīs daļās, pirmajā atmiņas blokā ir programma (nekas cits kā instrukcijas), otrā daļa ir dati (operandi), bet trešā daļa ir kaudze. Programmas instrukcijas vienmēr tiek glabātas programmu skaitītājā (PC), datu reģistrus identificē adrešu reģistrs (AR). Adrei no 3000 līdz 4001, ko izmanto kaudzei, un pirmo vienumu vai elementu glabā 4001.

Steka / kaudzes rādītājs 8085 mikroprocesorā

Programmētāja skats uz 8085. gadu mikroprocesors satur vispārējas nozīmes reģistrus un mērķa reģistri . Vispārējie reģistri ir A, B, C, D, E, H, L, un īpaša mērķa reģistri ir SP (Stack Pointer) un PC (Program Counter). Programmētāja skats uz 8085 mikroprocesoru parādīts zemāk redzamajā attēlā.

Programmētāja skats uz 8085

Programmētāja skats uz 8085

Steka rādītājs ir 16 bitu reģistrs, kurā ir atmiņas adrese, pieņemsim, ka kaudzes rādītāja (SP) saturs ir FC78H, un tad mikroprocesors 8085 to interpretē. Atmiņas vietās ir noderīga informācija no FC78H līdz FFFH un no FC77H līdz 0000H, atmiņas vietai nav noderīgas informācijas. Steka rādītāja interpretācija ir parādīta zemāk redzamajā attēlā.

Steka rādītāja interpretācija

Steka rādītāja interpretācija

Stack / Stack Pointer pamatdarbības

Tās ir divas kaudzes darbības: PUSH darbība un POP darbība.

PUSH darbība

PUSH nozīmē elementa stumšanu vai ievietošanu kaudzē. PUSH darbība vienmēr palielina kaudzes rādītāju un POP darbība vienmēr samazina kaudzes rādītāju. Stumšanas operācijas gadījumā mums jāpārbauda, ​​vai ir pieejama brīva vieta. Ja ir pieejama brīva vieta, mēs varam pāriet uz stumšanas darbību, ja brīva vieta nav pieejama, rodas kļūdas ziņojums, kas ir pārpildīts. Pārplūde jāpārbauda attiecīgi spiediena gadījumā. Push un pop pamatdarbība ir parādīta zemāk redzamajā attēlā.

PUSH un POP pamata darbība

PUSH un POP pamata darbība

Attēls (a) ir kaudze. Ja vēlaties iestumt elementu, kas ievieto elementu kaudzē, jums ir jāpiespiež (s, a), kur ‘s’ nav nekas cits kā kaudze. Kaudzē mēs ievietojam ‘a’ elementu, un šī darbība ir parādīta b) attēlā. Skatiet attēlu (3), pieņemsim, ka kaudzē ir trīs elementi a, b, c, un kaudze ir piepildīta ar elementu.

Ja vēlaties ievietot ceturto elementu ‘d’, izmantojot push (s, d), bet elementa ievietošanai nav vietas, tas norāda, ka kaudze ir pārpildīta. Pārplūdes terminoloģija tiek izmantota, kad kaudze ir pilna un zemāk parādīts virzīšanas darbības algoritms.

grūdiens (kaudze [], augšējā, maksimālā kaudze, vienums)

ja (top == maxstack-1)

{

drukāt “pārplūdi”

}

cits

{

top = top + 1

kaudze [augšā] = vienums

}

beigas

POP darbība

POP nozīmē elementa dzēšanu kaudzes augšdaļā. Pop operācijas gadījumā mums jāpārbauda, ​​vai kaudze sākotnēji ir tukša vai nav. Ja kaudze sākotnēji ir tukša, rodas nepietiekama plūsma. Pieņemsim, ka kaudze joprojām ir tukša, tomēr jūs vēlaties izlikt elementus kaudzē, bet tajā nav neviena elementa, un tas noved pie kaudzes nepietiekamas plūsmas.

Pārplūde jāpārbauda attiecīgi pop darbības gadījumā. Pop operācijā neatkarīgi no tā, kāds ir augšējais elements kaudzītē, kas būtu jāizlec vai jāizdzēš, tāpēc nav jāpiemin, kurš elements tiks atvērts, pēc noklusējuma tiks atvērts augšējais elements. Pop operācijas algoritms parādīts zemāk.

pop (kaudze [], augšā, vienums)

ja (augšpusē == - 1)

{

drukāt “nepietiekama plūsma”

}

cits

{

item = kaudze [augšā]

top = top-1

}

Piemērs

Elementi tiek ievietoti secībā kā A, B, C, D, E, tas apzīmē piecu elementu kaudzi. Attēlā (a) mēs vēlamies virzīt 'A' elementu uz kaudzes, tad augšdaļa kļūst nulle (augšējā = 0), līdzīgi augšdaļa = 1, kad tiek virzīts 'B' elements, augšējais = 2, kad elements 'C' tiek nospiests, augšējais = 3, kad tiek stumts 'D' elements, un augšējais = 4, kad nospiež 'E' elementu.

Tātad neatkarīgi no manis paņemtajiem elementiem tiek ievietots kaudzē, tagad kaudze ir pilna. Ja vēlaties nospiest citu elementu, kaudzē nav vietas, tāpēc tas norāda uz pārplūdi. Tagad kaudze ir pilna, ja vēlaties vispirms izdzēst elementu ‘E’. Stumšanas darbība ir parādīta zemāk redzamajā attēlā.

Push darbība

Push darbība

Mums jāizmanto pop darbība, lai izdzēstu elementus kaudzē. Tāpēc vienkārši pieminējiet pop (), nerakstiet argumentus pop, jo pēc noklusējuma tas izdzēš augšējo elementu. Pirmais “E” elements tiek dzēsts pēc nākamā “D” elementa ... “A”. Kad augšējie elementi tiek dzēsti, augšējā vērtība samazinās. Kad top = -1, kaudze norāda uz nepietiekamu plūsmu. Pop darbība ir parādīta zemāk redzamajā attēlā.

POP darbība

POP darbība

Tātad tas ir izskaidrojums tam, kā elementi tiek ievietoti un izdzēsti kaudzē, izmantojot push un pop darbību.

Pieteikumi

Steka / kaudzes rādītāja lietojumprogrammas ir

  • Stīgu maiņa
  • Līdzsvarota iekava
  • UNDO / FINGER
  • Sistēmas kaudze aktivizācijas ierakstiem
  • Infikss, prefikss, pēcfikss, izteiksme

Bieži uzdotie jautājumi

1). Kas ir kaudzes rādītājs rokā?

Steka rādītāju reģistrs (R13) tiek izmantots kā rādītājs ARM aktīvajai kaudzei.

2). Kāpēc kaudzes rādītājs ir 16 bitu?

Steka rādītājs (SP) un programmu skaitītājs (PC), ko izmanto, lai saglabātu iepriekšējo atrašanās vietu, un atmiņas vietas adrese ir 16 biti, tāpēc kaudzes rādītājs (SP) ir arī 16 bitu.

3). Kāda ir kaudzes rādītāja loma?

Steka rādītāja (SP) loma ir norādīt kaudzē esošā elementa augšdaļu.

4). Kura kaudze tiek izmantota 8085. gadā?

Steks, kas izmantots 8085. gadā, ir Last In First Out (LIFO).

5). Vai kaudzes rādītājs ir reģistrs?

Jā, kaudzes rādītājs (SP) ir adrešu reģistrs, kas vienmēr norāda kaudzē esošā elementa augšdaļu.

Šajā rakstā kas ir