📄 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 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -