⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system_call_entry.asm

📁 一个用于学习的操作系统
💻 ASM
字号:
;文件名: system_call.asm;说明:   系统调用的汇编入口;作者:   marsinfan;日期:   2006/03/02GLOBAL  _system_call_entry, _child_ret_from_sys_call, _ret_from_sys_callEXTERN   _system_calls, _do_signalSEGMENT _TEXT PUBLIC CLASS = CODE USE32_system_call_entry:    push    ds    push    es                       ; 保存段寄存器    push    gs    push    fs    push    ebp    push    edi    push    esi    push    edx     push    ecx    push    ebx                  mov     bx,  10h                 ;    mov     ds,  bx                  ;    mov     es,  bx                  ; 设置数据段寄存器的值    shl     eax, 2                   ; 根据需要系统调用序号算出具体偏移    call    [eax + _system_calls]    ; 调用系统调用    push    eax     ; 把取到了系统调用的返回值push到栈中保护起来,因为接下来要处理其他的东西        ;处理系统调用后的一些工作    _ret_from_sys_call:     ;处理信号    call _do_signal;        pop    eax  ;恢复系统调用后的返回值 (如果是fork系统调用,恢复fork后的返回值(包括父进程和子进程))    pop    ebx     pop    ecx        pop    edx        pop    esi    pop    edi    pop    ebp        pop     fs    pop     gs    pop     es    pop     ds    iretd    ;新fork出的子进程被调度后会从这里直接从ring0回到ring3中_child_ret_from_sys_call:    push 0;     ;由于新创建的子进程第一次被调度总是从这里进入ring3,                ;而在fork子进程中的返回值必定是0,                ;因此我们可以把0 push栈中,在_ret_from_sys_call后再pop到eax中    jmp _ret_from_sys_call;    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -