www.pudn.com > LFYOS.zip > restore.s
.global restore_parameter restore_parameter: lss kernel_stack_descr,%esp call system_call cmpl $(0x00),reload_cr3_flag je 1f movl $(0x00),reload_cr3_flag movl %cr3,%eax movl %eax,%cr3 1: movl current,%esi cmpl $(0x00),%esi je restore_parameter movl 0x44(%esi),%esp pushl 0x30(%esi) /*restore ss */ pushl 0x2c(%esi) /*restore esp */ pushl 0x28(%esi) /*restore eflag*/ pushl 0x24(%esi) /*restore cs */ pushl 0x20(%esi) /*restore eip */ /*push the upper four value for return to user mode*/ movl 0x38(%esi),%eax /*restore es*/ movl %eax,%es movl 0x3c(%esi),%eax /*restore fs*/ movl %eax,%fs movl 0x40(%esi),%eax /*restore gs*/ movl %eax,%gs movl 0x00(%esi),%eax /*restore eax */ movl 0x04(%esi),%ebx /*restore ebx */ movl 0x08(%esi),%ecx /*restore ecx */ movl 0x0c(%esi),%edx /*restore edx */ pushl 0x10(%esi) /*push esi for restore*/ movl 0x14(%esi),%edi /*restore edi */ movl 0x18(%esi),%ebp /*restore edi */ movl 0x34(%esi),%esi movl %esi,%ds /*restore ds*/ popl %esi /*restore esi from stack*/ iret /* return to user mode */