你的错误在于堆栈设置的太小,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。
相关文章
-
熔断指令是什么意思啊?
2023-03-27 06:50 阅读(599) -
Maxthon.exe-应用程序错误 “0x0237bbc3"指令引用胡"0x000000cc"内存。该内存 不能为 "read"。
2023-03-26 00:23 阅读(661) -
双核CPU是什么意思
2023-03-25 22:55 阅读(645)
1 笔记本电脑cpu温度过高怎么办?
603 阅读
2 CPU频率是什么意思?
610 阅读
3 cpuidle过高或过低
604 阅读
4 我的电脑CPU是P4 506,是64位还是32位?
597 阅读
5 赛扬g530cpu超频的方法有哪些
604 阅读