感謝湯旺河邊朋友,他說只有sp=4時才出現錯誤,sp=0,sp=2的情況不出現錯誤,試驗壹下確實如此。
硬件中斷產生時,需要壓入堆棧內6個字節。
調用中斷的命令int x
相當於下面這四句:
pushf
push cs
push ip
jmp XXXX:XXXX ;xxx:xxxx是從中斷向量表中查出的地址。
只有在sp=4時導致壓入的cs和ip不在壹起,無法正確返回。
如果讓sp=3,在我的機器上,會讓debug直接退出,並不會出現錯誤。
結論,避免出現這種錯誤的方法就是讓sp足夠大,絕對不能小於6。