當前位置:編程學習大全網 - 網站源碼 - ntvdm cpu遇到無效指令

ntvdm cpu遇到無效指令

妳的錯誤在於堆棧設置的太小,sp=4時,如果發生硬件中斷(如每秒18.2次的時鐘中斷),會導致堆棧空間不夠用,sp跨段,中斷處理程序中的iret指令沒法返回正確的地址,也就是跑飛了,運行到壹個存在非法指令的地址上去了,所以才會有妳看到的結果。

感謝湯旺河邊朋友,他說只有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。

  • 上一篇:自助下單平臺
  • 下一篇:C語言如何實現5個城市之間求最短路徑。 從A出發,最終回到A。 求最短路徑問題。 可用窮舉來完成。
  • copyright 2024編程學習大全網