一個想了好幾天的問題——關於8086cpu本身編寫9號中斷不能單步的問題

       在《彙編語言》第十五章中咱們可能遇到這樣的問題:程序運行正確,可是debug單步調試,卻沒法運行,修改int 9h中斷例程入口地址的指令,虛擬模式下,debug提示指令無效,而在實模式下,則程序卡死。

       這裏個人見解以下:由於咱們單步的時候,當設置9號中斷偏移地址的指令執行後,這時段地址尚未進行相應的設置,而單步鍵入命令(如:t命令)的時候程序要調用鍵盤中斷程序,這就致使程序轉去一個錯誤的地址執行程序,這就形成了一種假象—程序卡死,其實這時只是鍵盤中斷的入口地址不正確,致使鍵入的字符失去 響應,這樣的話,若是咱們要用debug調試程序,就須要用g命令跳過設置int 9中斷入口地址的指令,使其連續設置9號中斷入口地址,以免上述問題的發生。也許你會有這樣的迷惑(實際上是個人迷惑),就是在設置9號中斷入
口地址的時候咱們已經經過cli屏蔽了鍵盤中斷,這時應該不會響應9號中斷啊?那我要反問一句,那你cli以後,爲何還能鍵入命令符?其實不難猜測,這是debug自己的問題,其內部實現上,在執行完一條指令後,應該有相似sti這樣的指令執行,使其接受鍵盤中斷,爲下一條命令的輸入提供前提條件。

        反思:我開始思考時,就陷入了一種思惟怪圈,當時就想,爲何程序運行正確,單步運行就出錯,難道單步過程當中用到了9號中斷?不對啊,明明經過指令屏蔽了鍵盤中斷,如此反覆,思索未果,就去想有沒有其餘的可能,想啊想,想啊想,各類分析,各類思考,就是想不明白,越想越以爲迷惑,幾天過去了,又回到了問題的原點纔算是終於想通了,問題的解決來自於頭腦中一個忽然的發問:屏蔽了鍵盤中斷問斷,怎麼還能接受命令符?對這個問題的思索,纔算是解決了問題。
相關文章
相關標籤/搜索