程序集 – 在从中断处理程序返回之前,是否必须弹出由某些异常推
我已经加载了一个包含256个条目的idt表,它们都指向类似的处理程序:
>对于例外8和10-14,推送例外号码(这些例外会自动推送错误代码) 因此,当公共处理程序进入时,堆栈正确对齐并包含异常/中断号,错误代码(可能只是虚拟代码),eflags,cs和eip. 我的问题是关于从中断处理程序返回.我从堆栈中取出异常编号和错误代码后使用iret返回,但这对异常nr 8不起作用;如果我把错误代码留在堆栈上,那么它返回正常! 问题: >我是否必须将错误代码留在堆栈上,以查找将错误代码放在那里的异常?如果是这样,iret如何确定是否必须弹出错误代码? 解决方法
如果CPU自动推送错误代码,则处理程序必须在iret之前弹出它.如果是故障,陷阱或外部中断,iret指令不知道你来自哪里.它总是一样,并假设堆栈上没有错误代码.
引自SDM(软件开发人员手册),第3卷,第5章,第5.13节标题为错误代码:
你可以找到IA-32 Software Developer’s Manual here:http://www.intel.com/products/processor/manuals/ 第3卷第1部分,第5章描述了异常和中断处理.第2卷第1部分有iret指令的规范. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |