asm.s

来自「Linux 0.11 代码在不做修改的情况下,很难在现在的环境下这接编译通过(除」· S 代码 · 共 147 行

S
147
字号
/* *  linux/kernel/asm.s * *  (C) 1991  Linus Torvalds *//* * 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 double_fault, coprocessor_segment_overrun.globl invalid_TSS, segment_not_present, stack_segment.globl general_protection, coprocessor_error, irq13, 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_codecoprocessor_segment_overrun:	pushl $do_coprocessor_segment_overrun	jmp no_error_codereserved:	pushl $do_reserved	jmp no_error_codeirq13:	pushl %eax	xorb %al,%al	outb %al,$0xF0	movb $0x20,%al	outb %al,$0x20	jmp 1f1:	jmp 1f1:	outb %al,$0xA0	popl %eax	jmp coprocessor_errordouble_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 + =
减小字号Ctrl + -
显示快捷键?