|
עמוד:256
שימו לב , כאשר משתמשים במחסנית , יש להימנע משליפת נתונים מכתובות שלא הוכנסו אליהן נתונים . כך , למשל , אם לאחר השליפה השלישית תבוצע שליפה נוספת , יישלף נתון נוסף שערכו אקראי , כיוון שלכתובת הזו במחסנית לא הוכנס כל נתון במהלך העבודה עם המחסנית . המצב הזה מכונה גלישת מחסנית , ( Stack overflow ) שכן ראש המחסנית גולש בשליפה הזו מעבר למיקומו הראשוני , לאזור בזיכרון שאינו שייך למחסנית . בהגדרת המחסנית עלינו להקפיד להקצות מספיק מקום לסגמנט המחסנית כדי שיהיה אפשר לנהל את כל הנתונים הדרושים . לסיכום , המעקב אחר מיקומו של ראש המחסנית נעשה באוגר SP כל פעולת דחיפה מקטינה באופן אוטומטי את ערכו של האוגר , SP וכל פעולת שליפה מגדילה את הערך הזה . מבחינת ארגון הזיכרון של ה , 8086- המחסנית נמצאת במקטע המחסנית , והאוגר SS מצביע על תחילת המקטע . האוגר SP מצביע על כתובת יחסית הנתונה ביחס לתחילת מקטע . ( SS : SP ) rwt > nnn שאלה 7 . 2 האם אפשר להגדיר מחסנית בגודל ? 1 MB נמקו את תשובתכם . 7 . 3 . 2 הוראות דחיפה של נתונים למחסנית ושליפתם ממנה המעבד משתמש במחסנית לניהול מנגנון ביצוע הפרוצדורות ; בנוסף אפשר להשתמש במחסנית כאמצעי אחסון זמני לנתונים שהגישה אליהם צריכה להיות מהירה יחסית . כך ניתן , במהלך הרצה של תכנית , להקצות מקום בזיכרון לנתונים נוספים , שלא הוגדרו במקטע הנתונים . בסעיף זה נציג שתי הוראות בסיסיות המאפשרות דחיפה של נתונים למחסנית ושליפתם ממנה , ואחר כך נסביר כיצד להשתמש בהוראות האלה בתכנית . אך תחילה נדגיש כי כל פעולות הדחיפה והשליפה במעבד 8086 נעשות על אופרנדים של 16 סיביות . אי-אפשר לדחוף או לשלוף בית אחד 8 ) סיביות . ( א . ההוראה PUSH ההוראה לדחיפת נתונים למחסנית היא אופרנד PUSH
|
|