⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asm.s

📁 最早的linux操作系统源代码(3)
💻 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 + -