📄 call_mem.s
字号:
.global memory_call_interruption_routine,call_device_driver,reload_cr3
memory_call_interruption_routine:
pushl %ebp
movl %gs,%ebp
pushl %ebp
movl %fs,%ebp
pushl %ebp
movl %es,%ebp
pushl %ebp
movl %ds,%ebp
pushl %ebp
movl %ss,%ebp
movl %ebp,%ds
movl %ebp,%es
movl %ebp,%fs
movl %ebp,%gs
pushl %ebp
pushl %edi
pushl %esi
pushl %edx
pushl %ecx
pushl %ebx
pushl %eax
pushl %esp
call memory_call_process
pushl %eax
cmpl $(0x00),reload_cr3_flag
je 1f
movl $(0x00),reload_cr3_flag
movl %cr3,%eax
movl %eax,%cr3
1:
popl %eax
popl %ebx
popl %ebx
popl %ebx
popl %ecx
popl %edx
popl %esi
popl %edi
popl %ebp
popl %ebp
movl %ebp,%ds
popl %ebp
movl %ebp,%es
popl %ebp
movl %ebp,%fs
popl %ebp
movl %ebp,%gs
popl %ebp
iret
call_device_driver:
movl %esp,%ebx
movl 0x08(%ebx),%esp
addl $(0xffc),%esp
pushfl
sti
pushl %ebx
pushl 0x08(%ebx)
call *0x04(%ebx)
popl %ebx
popl %ebx
popfl
movl %ebx,%esp
ret
reload_cr3:
movl %cr3,%eax
movl %eax,%cr3
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -