|
עמוד:185
מנגנון ביצוע שגרות כדי לחזור בצורה תקינה מן השגרה לתכנית שקראה לה , המיקרו-מעבד חייב לשמור את תוכן האוגר IP לפני הקריאה , ולשחזר אותו בעת החזרה מהשגרה . שמירה זו של האוגר IP ושחזורו נעשים באמצעות דחיפת נתון למחסנית ושליפתו ממנה . הכתובת הנשמרת כאשר משתמשים במחסנית , יש להימנע משליפת נתונים מכתובות שלא נדחפו אליהן נתונים . כך , למשל , אם לאחר השליפה השלישית תבוצע שליפה נוספת , יישלף נתון שלא יהיה אפשר להעריך את ערכו , כיוון שלכתובת הזאת במחסנית לא נדחף כל נתון . המצב הזה מוצג באיור , 1 . 65 והנתון שיישלף מסומן ב . X- המצב הזה מכונה גלישת מחסנית , ( Stack overflow ) שכן ראש המחסנית גולש בשליפה הזאת מעבר למיקומו הראשוני , לאזור בזיכרון שאינו שייך למחסנית . אפשר למנוע את גלישת המחסנית , אם נקפיד שמספר השליפות מן המחסנית לא יעלה על מספר הדחיפות למחסנית . המעקב אחר מיקומו של ראש המחסנית נעשה באוגר , SP אשר מצביע תמיד על הכתובת שאליה נדחף הנתון האחרון . כל פעולת דחיפה מקטינה באופן אוטומטי את ערכו של האוגר , SP וכל פעולת שליפה מגדילה את הערך הזה . מבחינת ארגון הזיכרון של ה , 8086- המחסנית נמצאת במקטע המחסנית , והאוגר SS מצביע על תחילתו . האוגר SP אינו מצביע על כתובת מוחלטת , אלא על כתובת הנתונה יחסית לתחילת מקטע המחסנית . ( SS : SP ) איור 1 . 65 המחסנית מאיור 1 . 64 לאחר שליפה רביעית ; הנתון X שיישלף אינו מוגדר , שכן לא נדחף כל נתון למקום הזה
|
|