今天看到这章了,没有认真的想,直接跑到这儿来找答案了,看了楼上的回答好像懂了,这儿把我的理解说出来让高手们检查检查看我理解错误没有。估计是这样的,其实从cpu执行中断开始到最后用int9ret段中的iret退出这个中断一共有两个周期的压栈和出栈。
第一个:cpu开始执行中断过程时压的,就是(1)标志寄存器入栈,if=0,tf=0;(2)cs,ip入栈;在这两部中就完成了第一次压栈-------他所对应的出栈是程序最后的那个int9ret段中的iret;
第二个:就是我们为什么要设置pushf的原因了,同时cs ,ip也需要入栈,那么他是在哪儿入栈的呢?就是这句 call dword ptr ds:[0] ,他的功能相当于(1)cs,ip入栈;(2)(ip)=((ds)*16+0),(cs)=((ds)*16+2)-------他所对应的出栈在哪儿呢?估计就是在我们计算机原来的那个bios提供的int 9中断中,其中最后的那句iret; |