שגרות
שיגרה היא קטע קוד - תת תוכנית, שאנו מסוגלים לקרוא לו
מהתוכנית הראשית, ולאחר שהוא מתבצע התוכנית הראשית ממשיכה מהנקודה בה היא הופסקה.
למרות שזה לא מדויק, ניתן לאמר כי ראינו כבר מנגנון דומה -
מנגנון פסיקות התוכנה. כאשר קראנו לפסיקה, ביצוע התוכנית שלנו נעצר, הפסיקה ביצעה
את פעולתה ולאחר מכן התוכנית שלנו המשיכה לרוץ מהנקודה בה הפסיקה.
רעיון השגרות הוא רעיון דומה. על ההבדלים בין פסיקות תוכנה
לשגרות לא נעמוד במסמך זה.
למושג שגרה תרגומים רבים לעברית. על מנת להקל על הקורא
המעיין במקורות נוספים, נזכיר חלק מהם. מלבד הבדלי משמעויות מינוריים, כאשר אנו
משתמשים במושגים: שיגרה, פרוצדורה, פונקציה, שיטה - אנו למעשה מתכוונים אל אותו
מושג.
מדוע נרצה להשתמש בשגרות?
- כדי לשפר את בהירות התוכנית - חלוקת
משימה גדולה למספר משימות משנה מקלה על הבנת וכתיבת התוכנית.
- על מנת להמנע משכפול קוד - נניח שאנו
משתמשים ברצף פעולות מסויים במספר מקומות בתוכנית שלנו, אזי נהפוך רצף פקודות אלו
לתת תוכנית, שגרה, ובמקום לכתוב את רצף הפעולות בכל מקום בתוכנית שלנו, נקרא לשגרה
כשמתעורר הצורך.
הגדרת שגרה:
הגדרת השגרה נעשית בתוך סגמנט התוכנית.
שיגרה מתחילה בתווית המציינת את שם השיגרה, ומסתיימת בפקודה RET.
הקריאה לשגרה נעשה על ידי הפקודה CALL. הפקודה CALL
מקבלת אופרנד יחיד, והוא שם השגרה.
הפקודה CALL גורמת לקפיצה אל קוד השיגרה. קוד השגרה מתבצע עד
שמגיעים אל הפקודה RET, ואז המשך ריצת התוכנית ממשיך מהתוכנית/השגרה
הקוראת.
נציג לדוגמא שיגרה המקצרת את תהליך הדפסת תו על המסך.
נקבע כי לפני הקריאה לשגרה נשים ב-DL את התו להדפסה. כאשר נקרא
לשגרה, היא תדפיס תו זה.
STA SEGMENT STACK
DB 20 DUP (0)
STA ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:STA
START:
MOV DL, 'A'
CALL PUTCHAR
MOV DL, 'B'
CALL PUTCHAR
MOV DL, 'C'
CALL PUTCHAR
; End the program
MOV AX, 4C00H
INT 21H
PUTCHAR:
MOV AH, 2
INT 21H
RET
CODE ENDS
END START
בין קוד התוכנית הראשית לבין השגרות צריכה להיות הפרדה
מוחלטת, על מנת שקוד השגרות יתבצע רק כאשר מתרחשת קריאה אליהן בעזרת CALL.
על מנת שמכונה כלשהי תתמוך בשגרות, היא צריכה לתמוך בשני
מנגנונים:
- מנגנון להעברת בקרה:
- קריאה לשגרות.
- חזרה משגרות.
- מנגנון להעברת פרמטרים.
העלמות הזין של יוסי הקוסם
יוסי יקיריאם הזין שלך נעלם בתוך מחסנית קסמים אני מקווה לפחות שאתה לא מתכוון לחבר את המחסנית לרובה דרוך
בשמחה שמעון הטבח