当前位置: 代码迷 >> 汇编语言 >> 中止的返回 一个操作系统的实现
  详细解决方案

中止的返回 一个操作系统的实现

热度:5317   发布时间:2013-02-26 00:00:00.0
中断的返回 一个操作系统的实现
下面是一个中断
Assembly code
sys_call:        call    save        sti        call    [sys_call_table + eax * 4]        mov     [esi + EAXREG - P_STACKBASE], eax        cli        ret  ;iretd

最后的ret指令我觉得应该是iretd,当发生中断时eflags会压栈的所以直接ret会有问题的吧

------解决方案--------------------------------------------------------
查看save函数的内容,这本书是抄的minix的代码,你可以翻阅minix源码看到save函数的工作情况,它已经修改当前栈并增加了一个调用帧,所以后面的ret并不是中断返回,而是通过那个调用帧跳到准备最后清理工作和中断返回的位置。
上面所说的应当使用iretd和最后一个cli指令是多余的也都是错误的,这设计操作系统原子操作的基本知识,也没什么好解释的。
  相关解决方案