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

📄 int.s

📁 国内一位牛人自己开发的操作系统
💻 S
字号:
.global setup_idt,fatal_interruption_routine
.global disable_interruption,restore_interruption
disable_interruption:
	pushfl
	popl %eax
	cli
	ret
restore_interruption:
	movl 0x04(%esp),%eax
	pushl %eax
	popfl
	ret
idle_interruption_routine:
	iret
fatal_interruption_routine:
	movl $(0x03),%eax
	movl $(0x00),%ebx
	int $(0x80)
	iret

setup_idt:			/*this function setup idt table */
	lea idt_table,%edi
	xorl %ecx,%ecx
1:
	andl $3,(%edi)
	shll $13,(%edi)
	movl 4(%edi),%edx
	movl $((0x10)<< 16),%eax
	movw %dx,%ax		/* selector = 0x0010 = cs */
	andl $0xffff0000,%edx
	orl  $0x00008E00,%edx	/* interrupt gate - dpl=0, present */
	orl  (%edi),%edx

	movl %eax,(%edi)
	movl %edx,4(%edi)
	addl $8,%edi
	incl %ecx

	lea idt_table_end,%eax
	cmpl %edi,%eax
	jne 1b

	lea idle_interruption_routine,%edx
	movl $((0x10)<< 16),%eax
	movw %dx,%ax		/* selector = 0x0010 = cs */
	andl $0xffff0000,%edx
	orl  $0x00008E00,%edx	/* interrupt gate - dpl=0, present */

1:
	cmpl $256,%ecx
	je 2f
	movl %eax,(%edi)
	movl %edx,4(%edi)
	addl $8,%edi
	incl %ecx
	jmp 1b
2:

	lidt idt_descr

	ret
.align 16
	.word 0
idt_descr:
	.word 256*8-1
	.long idt_table
.align 16

idt_table:
/* 	first value is interruption gate dpl(only 0-3)
	second value is interruption  process function  
	setup_idt function turn all items in this table 
	into interruption gates 
*/
	.long 0,fatal_interruption_routine	/*00:div*/
	.long 0,fatal_interruption_routine	/*01:debug*/
	.long 0,fatal_interruption_routine	/*02:reserved */
	.long 0,fatal_interruption_routine	/*03:break point*/
	.long 0,fatal_interruption_routine	/*04:overflow */
	.long 0,fatal_interruption_routine	/*05:bound*/
	.long 0,fatal_interruption_routine	/*06:invalid operand*/
	.long 0,fatal_interruption_routine	/*07:can not use coprocessor */
	.long 0,fatal_interruption_routine	/*08:exception occur again*/
	.long 0,fatal_interruption_routine	/*09:coprocessor segment error*/
	.long 0,fatal_interruption_routine	/*0a:invalid tss*/
	.long 0,fatal_interruption_routine	/*0b:segment do not exist*/
	.long 0,fatal_interruption_routine	/*0c:stack fault*/
	.long 0,fatal_interruption_routine	/*0d:general protection*/
	.long 0,page_fault_interruption		/*0e:page fault protection*/
	.long 0,fatal_interruption_routine	/*0f:reserved*/

	.long 0,fatal_interruption_routine	/*10:coprocessor exception*/
	.long 0,fatal_interruption_routine	/*11:align check */
	.long 0,fatal_interruption_routine	/*12:*/
	.long 0,fatal_interruption_routine	/*13:*/
	.long 0,fatal_interruption_routine	/*14:*/
	.long 0,fatal_interruption_routine	/*15:*/
	.long 0,fatal_interruption_routine	/*16:*/
	.long 0,fatal_interruption_routine	/*17:*/
	.long 0,fatal_interruption_routine	/*18:*/
	.long 0,fatal_interruption_routine	/*19:*/
	.long 0,fatal_interruption_routine	/*1a:*/
	.long 0,fatal_interruption_routine	/*1b:*/
	.long 0,fatal_interruption_routine	/*1c:*/
	.long 0,fatal_interruption_routine	/*1d:*/
	.long 0,fatal_interruption_routine	/*1e:*/
	.long 0,fatal_interruption_routine	/*1f:*/

	.long 0,timer_interruption_routine	/*20:*/
	.long 0,fatal_interruption_routine	/*21:*/
	.long 0,fatal_interruption_routine	/*22:*/
	.long 0,fatal_interruption_routine	/*23:*/
	.long 0,fatal_interruption_routine	/*24:*/
	.long 0,fatal_interruption_routine	/*25:*/
	.long 0,fatal_interruption_routine	/*26:*/
	.long 0, idle_interruption_routine	/*27:*/
	.long 0,fatal_interruption_routine	/*28:*/
	.long 0,fatal_interruption_routine	/*29:*/
	.long 0,fatal_interruption_routine	/*2a:*/
	.long 0,fatal_interruption_routine	/*2b:*/
	.long 0,fatal_interruption_routine	/*2c:*/
	.long 0,fatal_interruption_routine	/*2d:*/
	.long 0,fatal_interruption_routine	/*2e:*/
	.long 0,fatal_interruption_routine	/*2f:*/

	.long 0,fatal_interruption_routine	/*30:*/
	.long 0,fatal_interruption_routine	/*31:*/
	.long 0,fatal_interruption_routine	/*32:*/
	.long 0,fatal_interruption_routine	/*33:*/
	.long 0,fatal_interruption_routine	/*34:*/
	.long 0,fatal_interruption_routine	/*35:*/
	.long 0,fatal_interruption_routine	/*36:*/
	.long 0,fatal_interruption_routine	/*37:*/
	.long 0,fatal_interruption_routine	/*38:*/
	.long 0,fatal_interruption_routine	/*39:*/
	.long 0,fatal_interruption_routine	/*3a:*/
	.long 0,fatal_interruption_routine	/*3b:*/
	.long 0,fatal_interruption_routine	/*3c:*/
	.long 0,fatal_interruption_routine	/*3d:*/
	.long 0,fatal_interruption_routine	/*3e:*/
	.long 0,fatal_interruption_routine	/*3f:*/

	.long 0,fatal_interruption_routine	/*40:*/
	.long 0,fatal_interruption_routine	/*41:*/
	.long 0,fatal_interruption_routine	/*42:*/
	.long 0,fatal_interruption_routine	/*43:*/
	.long 0,fatal_interruption_routine	/*44:*/
	.long 0,fatal_interruption_routine	/*45:*/
	.long 0,fatal_interruption_routine	/*46:*/
	.long 0,fatal_interruption_routine	/*47:*/
	.long 0,fatal_interruption_routine	/*48:*/
	.long 0,fatal_interruption_routine	/*49:*/
	.long 0,fatal_interruption_routine	/*4a:*/
	.long 0,fatal_interruption_routine	/*4b:*/
	.long 0,fatal_interruption_routine	/*4c:*/
	.long 0,fatal_interruption_routine	/*4d:*/
	.long 0,fatal_interruption_routine	/*4e:*/
	.long 0,fatal_interruption_routine	/*4f:*/

	.long 0,fatal_interruption_routine	/*50:*/
	.long 0,fatal_interruption_routine	/*51:*/
	.long 0,fatal_interruption_routine	/*52:*/
	.long 0,fatal_interruption_routine	/*53:*/
	.long 0,fatal_interruption_routine	/*54:*/
	.long 0,fatal_interruption_routine	/*55:*/
	.long 0,fatal_interruption_routine	/*56:*/
	.long 0,fatal_interruption_routine	/*57:*/
	.long 0,fatal_interruption_routine	/*58:*/
	.long 0,fatal_interruption_routine	/*59:*/
	.long 0,fatal_interruption_routine	/*5a:*/
	.long 0,fatal_interruption_routine	/*5b:*/
	.long 0,fatal_interruption_routine	/*5c:*/
	.long 0,fatal_interruption_routine	/*5d:*/
	.long 0,fatal_interruption_routine	/*5e:*/
	.long 0,fatal_interruption_routine	/*5f:*/

	.long 0,fatal_interruption_routine	/*60:*/
	.long 0,fatal_interruption_routine	/*61:*/
	.long 0,fatal_interruption_routine	/*62:*/
	.long 0,fatal_interruption_routine	/*63:*/
	.long 0,fatal_interruption_routine	/*64:*/
	.long 0,fatal_interruption_routine	/*65:*/
	.long 0,fatal_interruption_routine	/*66:*/
	.long 0,fatal_interruption_routine	/*67:*/
	.long 0,fatal_interruption_routine	/*68:*/
	.long 0,fatal_interruption_routine	/*69:*/
	.long 0,fatal_interruption_routine	/*6a:*/
	.long 0,fatal_interruption_routine	/*6b:*/
	.long 0,fatal_interruption_routine	/*6c:*/
	.long 0,fatal_interruption_routine	/*6d:*/
	.long 0,fatal_interruption_routine	/*6e:*/
	.long 0,fatal_interruption_routine	/*6f:*/

	.long 0,fatal_interruption_routine	/*70:*/
	.long 0,fatal_interruption_routine	/*71:*/
	.long 0,fatal_interruption_routine	/*72:*/
	.long 0,fatal_interruption_routine	/*73:*/
	.long 0,fatal_interruption_routine	/*74:*/
	.long 0,fatal_interruption_routine	/*75:*/
	.long 0,fatal_interruption_routine	/*76:*/
	.long 0,fatal_interruption_routine	/*77:*/
	.long 0,fatal_interruption_routine	/*78:*/
	.long 0,fatal_interruption_routine	/*79:*/
	.long 0,fatal_interruption_routine	/*7a:*/
	.long 0,fatal_interruption_routine	/*7b:*/
	.long 0,fatal_interruption_routine	/*7c:*/
	.long 0,fatal_interruption_routine	/*7d:*/
	.long 0,fatal_interruption_routine	/*7e:*/
	.long 0,fatal_interruption_routine	/*7f:*/

	.long 3,system_call_interruption_routine	/*80: */
	.long 3,memory_call_interruption_routine	/*81: */
	.long 3,input_key_board_routine		/*82: */
	.long 3,input_current_time_routine	/*83: */
	.long 3,kernel_print_deal_routine	/*84: */

idt_table_end:
	.org idt_table+256*8-1
	.long 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -