📄 asm.s
字号:
/* * asm.s contains the low-level code for most hardware faults. * page_exception is handled by the mm, so that isn't here. This * file also handles (hopefully) fpu-exceptions due to TS-bit, as * the fpu must be properly saved/resored. This hasn't been tested. */.globl divide_error,debug,nmi,int3,overflow,bounds,invalid_op.globl device_not_available,double_fault,coprocessor_segment_overrun.globl invalid_TSS,segment_not_present,stack_segment.globl general_protection,coprocessor_error,reserveddivide_error: pushl $do_divide_errorno_error_code: xchgl %eax,(%esp) pushl %ebx pushl %ecx pushl %edx pushl %edi pushl %esi pushl %ebp push %ds push %es push %fs pushl $0 # "error code" lea 44(%esp),%edx pushl %edx movl $0x10,%edx mov %dx,%ds mov %dx,%es mov %dx,%fs call *%eax addl $8,%esp pop %fs pop %es pop %ds popl %ebp popl %esi popl %edi popl %edx popl %ecx popl %ebx popl %eax iretdebug: pushl $do_int3 # _do_debug jmp no_error_codenmi: pushl $do_nmi jmp no_error_codeint3: pushl $do_int3 jmp no_error_codeoverflow: pushl $do_overflow jmp no_error_codebounds: pushl $do_bounds jmp no_error_codeinvalid_op: pushl $do_invalid_op jmp no_error_codemath_emulate: popl %eax pushl $do_device_not_available jmp no_error_codedevice_not_available: pushl %eax movl %cr0,%eax bt $2,%eax # EM (math emulation bit) jc math_emulate clts # clear TS so that we can use math movl current,%eax cmpl last_task_used_math,%eax je 1f # shouldn't happen really ... pushl %ecx pushl %edx push %ds movl $0x10,%eax mov %ax,%ds call math_state_restore pop %ds popl %edx popl %ecx1: popl %eax iretcoprocessor_segment_overrun: pushl $do_coprocessor_segment_overrun jmp no_error_codereserved: pushl $do_reserved jmp no_error_codecoprocessor_error: pushl $do_coprocessor_error jmp no_error_codedouble_fault: pushl $do_double_faulterror_code: xchgl %eax,4(%esp) # error code <-> %eax xchgl %ebx,(%esp) # &function <-> %ebx pushl %ecx pushl %edx pushl %edi pushl %esi pushl %ebp push %ds push %es push %fs pushl %eax # error code lea 44(%esp),%eax # offset pushl %eax movl $0x10,%eax mov %ax,%ds mov %ax,%es mov %ax,%fs call *%ebx addl $8,%esp pop %fs pop %es pop %ds popl %ebp popl %esi popl %edi popl %edx popl %ecx popl %ebx popl %eax iretinvalid_TSS: pushl $do_invalid_TSS jmp error_codesegment_not_present: pushl $do_segment_not_present jmp error_codestack_segment: pushl $do_stack_segment jmp error_codegeneral_protection: pushl $do_general_protection jmp error_code
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -