מה זה Stack / Stack Pointer: סוגים ויישומיו

נסה את הכלי שלנו לביטול בעיות





הערימה אינה אלא מבנה הנתונים הליניארי בו ההכנסה והמחיקה מתרחשים רק בקצה אחד. לפעולת ההכנסה יש שם מיוחד המכונה PUSH ולפעולת המחיקה יש שם מיוחד המכונה POP. ה- PUSH ו- POP הם שתי פעולות בסיסיות שניתן לבצע רק בערימה מסוימת. זוהי קבוצה של מיקומי זיכרון ומיקומי הזיכרון קשורים בזיכרון קריאה או בזיכרון כתיבה. זה משמש לאחסון מידע בינארי במהלך ביצוע התוכנית, כאשר אנו מבצעים תוכנית כלשהי, התוכן של אותה תוכנית הולך לאחסן בערימה. זה נובע מכך אחרון בכניסה הראשונה (LIFO) והוא משמש רק לאחסון ואחזור הנתונים אך לא משמש לאחסון הנתונים. ההסבר הקצר על מצביע הערימה / הערימה נדון להלן.

מה זה Stack / Stack Pointer?

הַגדָרָה: הערימה היא מכשיר אחסון, המשמש לאחסון מידע או נתונים באופן של LIFO (Last In First Out). בכל פעם שאנחנו מזינים את הנתונים בצורה של LIFO, האלמנט שצריך למחוק תחילה הוא האלמנט האחרון להכנסה, ולכן האלמנט האחרון שהוכנס הוצא ראשון. זוהי יחידת הזיכרון בתוך רישום כתובות הנקרא stack stacker (SP). מצביע הערימה מציין תמיד את האלמנט העליון בערימה שמשמעותו איזו מיקום יש להכניס את הנתונים.




סוגי ערימה

ישנם שני סוגים של ערימות שהם ערימת רישום וערימת הזיכרון.

רשום ערימה

מחסנית הרישום היא גם מכשיר זיכרון הקיים ביחידת הזיכרון, אך הוא מטפל רק בכמות קטנה של נתונים. עומק הערימה תמיד מוגבל בערמת הרישום מכיוון שגודל ערימת הרישום קטן מאוד בהשוואה לזיכרון.



דחף את הפעולה בערימה של הרישום

שלב 1: מצביע הערימה מתגבר ב -1.

SP ← SP + 1


שלב 2: הזן את הנתונים לערימה.

1000 [SP] ← CT

איפה DR הוא רשם הנתונים

שלב 3: בדוק אם הערימה מלאה או לא

אם (sp = 0) אז (מלא ← 1)

שלב 4: סמן לא ריק

ריק ← 0

מבצע פופ בערמת הרשמים

שלב 1: קרא נתונים מהערימה.

DR ← M [SP]

שלב 2: נקודת מחסנית של ירידה.

SP ← SP-1

שלב 3: בדוק אם הערימה ריקה או לא

אם sp = 0 אז ריק ← 1

ארגון המחסניות של מחסנית הרישום של 64 סיביות מוצג באיור שלהלן.

רשום ארגון ערימה

רשום ארגון ערימה

ערימת זיכרון

בערמת הזיכרון, עומק הערימה גמיש. הוא תופס כמות גדולה של נתוני זיכרון, ואילו בערמת הרישום יאוחסן מספר סופי של מילות זיכרון.

לחץ על פעולת ערימת זיכרון

שלב 1: SP ← SP-1

שלב 2: 1000 [SP] ← CT

פעולת פופ בערימת זיכרון

שלב 1: DR ← M [SP]

שלב 2: SP ← SP-1

השווה ליחידת הרישום, יחידת הזיכרון מאחסנת כמות גדולה של נתונים. דמות מחסנית הזיכרון מוצגת באיור שלהלן.

ערימת זיכרון

ערימת זיכרון

יחידת הזיכרון הכוללת מחולקת לשלושה חלקים, ביחידת הזיכרון הראשונה יש את התוכנית (אלא הוראות), החלק השני הוא נתונים (אופרנדים) והחלק השלישי הוא מחסנית. הוראות התוכנית נשמרות תמיד בדלפק התוכנה (PC), ורשמי הנתונים מזוהים על ידי רישום הכתובות (AR). הכתובת 3000 עד 4001 המשמשת את הערימה ואת הפריט או האלמנט הראשון מאוחסנת ב- 4001.

מצביע מחסנית / מחסנית במעבד 8085

תצוגת המתכנת של 8085 מיקרו - מעבד מכיל רישומים למטרות כלליות רושמים למטרות מיוחדות . הרישומים למטרות כלליות הם A, B, C, D, E, H, L, והרישומים המיועדים המיוחדים הם SP (Stack Pointer) ו- PC (Counter Program). תצוגת המתכנת של המעבד 8085 מוצגת באיור שלהלן.

תצוגת מתכנת 8085

תצוגת מתכנת 8085

מצביע הערימה הוא רישום של 16 סיביות המכיל כתובת זיכרון, נניח שתוכן מצביע הערימה (SP) הוא FC78H, ואז המעבד 8085 מפרש אותו. במיקומי הזיכרון יש מידע שימושי מ- FC78H ל- FFFH ומ- FC77H עד 0000H אין למיקום הזיכרון מידע שימושי. הפרשנות של מצביע הערימה מוצגת באיור שלהלן.

פרשנות ל- Stack Pointer

פרשנות ל- Stack Pointer

פעולות בסיסיות של Stack / Stack Pointer

ישנן שתי פעולות של המחסנית שהן: פעולת PUSH ופעולת POP.

מבצע PUSH

משמעות ה- PUSH היא דחיפה או הכנסת אלמנט לערימה. פעולת PUSH תמיד מגדילה את מצביע הערימה ופעולת POP תמיד מקטינה את מצביע הערימה. במקרה של פעולת דחיפה, עלינו לבדוק האם יש מקום פנוי או לא. אם מקום פנוי זמין, נוכל לעבור לפעולת הדחיפה, אם אין מקום פנוי אז מתרחשת הודעת שגיאה שהיא הצפה. יש לבדוק את ההצפה במקרה של פעולת דחיפה בהתאמה. הפעולה הבסיסית של פוש ופופ מוצגת באיור שלהלן.

הפעלה בסיסית של PUSH ו- POP

הפעלה בסיסית של PUSH ו- POP

איור (א) הוא הערימה. אם אתה רוצה לדחוף את האלמנט שהוא הכנסת האלמנט לערמה, אתה צריך לדחוף (s, a), שם 's' אינו אלא ערימה. בערימה, אנו מציבים את אלמנט 'a' ופעולה זו מוצגת באיור (ב). ראה את האיור (3), נניח שערימה מכילה שלושה אלמנטים a, b, c, והערימה מלאה באלמנט.

אם ברצונך להוסיף אלמנט רביעי -'ד 'באמצעות דחיפה (s, d), אך אין מקום פנוי להכנסת האלמנט, אז זה מציין שהערימה עולה על גדותיו. משתמשים במינוח הצפה כאשר הערימה מלאה ואלגוריתם של פעולת הדחיפה מוצג להלן.

דחיפה (מחסנית [], למעלה, ערימה מקסימלית, פריט)

אם (למעלה == maxstack-1)

{

הדפס 'הצפה'

}

אַחֵר

{

למעלה = למעלה + 1

מחסנית [למעלה] = פריט

}

סוֹף

מבצע POP

משמעות ה- POP היא מחיקת האלמנט בראש הערימה. במקרה של פעולת פופ, עלינו לבדוק האם הערימה תחילה ריקה או לא. אם המחסנית ריקה בתחילה אז נוצר מצב של תת זרימה. נניח שהערימה ריקה עדיין אתה רוצה להקפיץ את האלמנטים בערימה אך אין אלמנטים בערימה ואז זה מוביל לזרם מחסנית.

יש לבדוק את הזרימה התחתונה במקרה של הפעלת פופ בהתאמה. בפעולת פופ כל מה שהאלמנט העליון קיים בערימה שיש להקפיד או למחוק, ולכן אין צורך להזכיר איזה אלמנט יוקפץ, כברירת מחדל יופץ האלמנט העליון ביותר. האלגוריתם של פעולת הפופ מוצג להלן.

פופ (מחסנית [], עליון, פריט)

אם (למעלה == - 1)

{

הדפס 'זרימה'

}

אַחֵר

{

פריט = מחסנית [למעלה]

למעלה = עליון -1

}

דוגמא

האלמנטים מוכנסים לפי הסדר כ- A, B, C, D, E, הוא מייצג את ערימת חמישה האלמנטים. באיור (א), אנו רוצים לדחוף אלמנט 'A' בערימה ואז החלק העליון הופך לאפס (למעלה = 0), באופן דומה החלק העליון = 1 כאשר נדחף אלמנט 'B', למעלה = 2 כאשר האלמנט 'C' נדחף, למעלה = 3 כאשר נדחף אלמנט 'D', ולמעלה = 4 כאשר נדחף אלמנט 'E'.

אז מה שהאלמנטים שלקחתי ממוקמים בערימה, עכשיו הערימה מלאה. אם אתה רוצה לדחוף אלמנט אחר אין מקום בערימה, ולכן זה מציין את הצפתו. כעת הערימה מלאה אם ​​ברצונך להקפיץ את אלמנט 'E' יש למחוק תחילה. פעולת הדחיפה מוצגת באיור שלהלן.

מבצע דחיפה

מבצע דחיפה

עלינו להשתמש בפעולת הפופ כדי למחוק את האלמנטים בערימה. אז רק הזכירו פופ () אל תכתבו טיעונים בפופ כי כברירת מחדל הוא מוחק את האלמנט העליון. האלמנט 'E' הראשון נמחק אלמנט 'D' הבא ... .. 'A'. כאשר האלמנטים העליונים מוחקים אז הערך העליון יורד. כאשר למעלה = -1 הערימה מציינת תת-זרימה. פעולת הפופ מוצגת באיור שלהלן.

מבצע POP

מבצע POP

אז זה ההסבר כיצד האלמנטים מוחדרים ונמחקים בערימה באמצעות פעולת דחיפה ופופ.

יישומים

היישומים של מצביע הערימה / הערימה הם

  • היפוך מיתרים
  • סוגריים מאוזנים
  • ביטול / אצבע
  • מחסנית מערכת לרישומי הפעלה
  • אינפיקס, קידומת, פוסטפיקס, ביטוי

שאלות נפוצות

1). מהו מצביע הערימה בזרוע?

רושם מצביעי הערימה (R13) המשמש כמצביע לערימה הפעילה ב- ARM.

2). מדוע מצביע הערימה הוא 16 סיביות?

מצביע הערימה (SP) ומונה התוכניות (PC) המשמשים לאחסון המיקום הקודם וכתובת מיקום הזיכרון היא 16 ביטים, כך שמצביע הערימה (SP) הוא גם הוא של 16 ביט.

3). מה תפקיד מצביע הערימה?

תפקיד מצביע הערימה (SP) הוא לציין את החלק העליון של האלמנט בערימה.

4). באיזה מחסנית נעשה שימוש בשנת 8085?

הערימה ששימשה בשנת 8085 היא Last In First Out (LIFO).

5). האם מצביע הערימה הוא רישום?

כן, מצביע הערימה (SP) הוא רישום כתובות המציין תמיד את החלק העליון של האלמנט בערימה.

במאמר זה מהו