שגרות

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

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

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

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

מדוע נרצה להשתמש בשגרות?

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

הגדרת שגרה:

הגדרת השגרה נעשית בתוך סגמנט התוכנית.

שיגרה מתחילה בתווית המציינת את שם השיגרה, ומסתיימת בפקודה 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.

על מנת שמכונה כלשהי תתמוך בשגרות, היא צריכה לתמוך בשני מנגנונים:

  1. מנגנון להעברת בקרה:
  • קריאה לשגרות.
  • חזרה משגרות.
  1. מנגנון להעברת פרמטרים.

מאת: שמעון הטבח

העלמות הזין של יוסי הקוסם

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

בשמחה שמעון הטבח
מאת: הילה

si

היי, איך הכנסתם ערך כלשהו למערך? כשעשיתם MOV ARR2[SI], AL. למה si נמצא בסוגריים? מה הוא אומר?
מאת: יוסי הקוסם

העלמות זין

נעלם לי הזין מקסם שהשתבש (דחפתי את הזין למחסנית קסם וניראה לי שלא העברתי את הזין לטיפוס מילה הזיו שלי ללא ברית מילה אז זה השתבש)
תעזרו בבקשה!!!
שיתוף:
| עוד