|
עמוד:348
דוגמה 9 . 5 לסיכום , נכתוב תכנית שמשנה את שגרת הפסיקה מס . 0 המוזעקת כאשר מתבצעת חלוקה באפס . אנו נשנה שגרה זו ונציג הודעה כי התבצעה חלוקה באפס . תחילה בדקו כיצד מתבצעת תכנית הכולל את שתי ההוראות הבאות : mov 01 , 0 cl div cl כפי שניתן לראות , ביצוע התכנית מופסק ומתקבלת הודעה : . divide by zero שגרת פסיקה מס . 0 מוגדרת כך שבזמן שהיא מוזעקת , תחילה המעבד דוחף למחסנית את מען הוראת החילוק עצמה ולא את מען ההוראה הבאה . כך ניתן לדעת מהי הוראת החילוק שבוצעה וגרמה לשגיאה . כפי שראינו בפרק , 6 תרגום הוראת חילוק לשפת מכונה יכול ליצר הוראות מכונה באורך שונה והדבר תלוי בשיטת הטיעון ובסוג האופרנדיס . אם למחסנית תוכנס כתובת של ההוראה העוקבת להוראת החילוק , קשה יהיה לחשב את כתובת הוראת החילוק שגרמה לשגיאה . כדי לסיים את התכנית ולהפיק את ההודעה המתאימה , נכתוב שגרת פסיקה שתחילה מקדמת את כתובת ההוראה הבאה לביצוע ואחר מציגה הודעת שגיאה . התכנית ? מחליפה את כתובת תא של פסיקה מס . 0 בכתובת שגרה myProc שכתבנו , אך תחילה שומרת את כתובת שגרת הפסיקה המקורית . לאחר הזעקת שגרת הפסיקה מס . , 0 נשחזר את טבלת הפסיקות ונחזיר את הכתובת של שגרת הפסיקה המקורית . . STACK 100 h . MODEL SMALL . DATA הודעת שגיאה ; . CODE outMessage db ODh , OAh , ' divide by zero ' , ODh , OAh , ' $ ' mov ds , ax mov ax , @ DATA start : שמירת כתובת שגרת פסקה מס 0 באוגרים ; ES : BX int 21 h mov al , 0 mov ah , 35 h
|
|