您的位置首页百科知识

ntvdm cpu遇到无效指令

ntvdm cpu遇到无效指令

你的错误在于堆栈设置的太小,sp=4时,如果发生硬件中断(如每秒18.2次的时钟中断),会导喊悉致堆栈空间不够用,sp跨段,中断处理程序中的iret指令没法返回正确的地址,也就是跑飞了,运行到一个存在非法指令的地址上去了,所以才会有你看到的结果。感谢汤旺河边朋友,他说只有sp=4时才出现错误,sp=0,sp=2的情况不出现错误,试验一下确实如此。硬件中断产生时,需要压入堆栈内6个字节。调用中断的命令int x相当于下面这四句:pushfpush cspush ipjmp XXXX:XXXX ;xxx:xxxx是从中断向量咐大表中查出的地址衡渗竖。只有在sp=4时导致压入的cs和ip不在一起,无法正确返回。如果让sp=3,在我的机器上,会让debug直接退出,并不会出现错误。结论,避免出现这种错误的方法就是让sp足够大,绝对不能小于6。