|
עמוד:179
על-פי התכנית , קבוצת ההוראות המודגשות , המבצעות השהיה , רשומות פעמיים . השוני היחיד ביניהן בא לידי ביטוי בתוויות לקפיצה : DELAY 1 ו CONTINUE 1 , DELAY 2- ו , CONTINUE 2- שכן אי-אפשר לתת אותה תווית לשתי הוראות ( שורות ) שונות בתכנית . כדי לשפר את התכנית , נכתוב שגרה המבצעת השהיה , ונקרא לה במהלך התכנית . התכנית שלפניכם מבצעת אותה פעולה , אך היא כוללת שימוש בשגרה . קביעת כתובת למפתח הפלט MOV BX , 0 FFFFh ; MOV DX , 378 h ; תחילת הלולאה – הארת הדפ " א OUT DX , AL AGAIN : MOV AL , 01 h ; קריאה לשגרה השהיה CALL DELAY ; החשכת הדפ " א OUT DX , AL MOV AL , 00 h ; קריאה לשגרה השהיה CALL DELAY ; בקרת הלולאה JNZ AGAIN DEC BX ; ********************************* השגרה ; ******************************** DELAY השהיה על-ידי לולאה כפולה DELAY : MOV AX , 0 FFFFh ; לולאה פנימית AGAIN : MOV CX , 0 FFFFh ; עדכון מונה לולאה פנימית JNZ CONTINUE CONTINUE : DEC CX ; עדכון מונה לולאה חיצונית JNZ AGAIN DEC AX ; סיום השגרה וחזרה לתכנית RET ; התכנית החדשה קצרה יותר וקלה יותר לקריאה . לכן , אפשר לעקוב בקלות יתר אחר ביצוע התכנית , ולתקן אותה אם צריך . השגרה רשומה בסוף התכנית , אבל אין הכרח לשמור על הסדר הזה . לאחר ביצוע ההוראה , OUT DX , AL התכנית מבצעת את ההוראה . DELAY CALL ההוראה הזאת מעבירה את בקרת התכנית להוראה הראשונה בשגרה , אליה מוצמדת התווית , DELAY ומכאן ואילך , עד ההוראה , RET כל ההוראות בשגרה מתבצעות לפי סדר כתיבתן . כאשר השגרה מגיעה להוראה , RET התכנית חוזרת להוראה העוקבת להוראה . CALL DELAY
|
|