微機實驗課-實驗三中斷程式設計
微機實驗三操作參考
2018年11月 William
〇,實驗目的
結合實驗指導書,1)掌握中斷概念,掌握中斷程式設計方法;2)掌握中斷程式除錯方法。
一,建立本次實驗的工程檔案
如前面實驗一樣,複製實驗指導書上的程式碼,建立如 shiyan3.asm檔案,放在帶彙編工具的目標資料夾下。詳細操作,參見前面的實驗。
提醒一點:在使用命令[ MASM shiyan3.asm ] 進行彙編時,出現一個警告,說我們使用了保留字wait。解決方法:1,警告可以不管他。2,或者,將程式中 wait變一下,如變成wait1 就ok了。
二,完成本次實驗的基本要求
1,觀察並記錄00H中斷向量的變化
思路:要記錄00H中斷向量的變化,則需分析源程式,知道00H中斷向量在程式中式入科使用的。程式分析註釋如下圖。
首先觀察,當DS和ES處事化時,記憶體地址中的值,執行命令-g 076B:000A如下。
可以看到,只執行源程式的前四行程式碼時,即初始化時,DS地址中的內容為0,ES地址中內容為程式碼段CS的初始地址,和一個偏己地址,即【076B:005B】。
接下來,執行命令-g 076B:0010 ,即執行完“call init”之後,得到如下圖中結果。
可見DS、ES資料段中,已存好00H中斷向量的偏移地址和基地址,即【076B:005B】
以上便是00H中斷向量的變化情況。
2,設定斷點在newint行,觀察結果
多次使用—U命令,可以找到076B:005B 對應地址的程式碼,如下圖。可知005B對應即為子程式newinit的偏移地址。即,當中斷產生時,將呼叫newinit子程式。
當輸出ABCD等健值時,無反應,只有當輸入“I”時,程式執行到“斷電”,如下圖,此時程式已經進入“MOV BP,SP”這一行了,即將執行newinit子程式。
繼續使用-G 命令,將程式全部執行。會觀察到,回顯一個“A”值,即成功執行了newinit子程式的功能。如下圖。
此時程式回到wait主程式迴圈中,若鍵入I,則在此進入00H中斷,鍵入Q,則退出到DOS介面,鍵入其他,則無反應。如下圖所示。
到此完成任務一的內容。
歡迎交流提問,請留言,或加筆者的扣扣1021100382~