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

📄 idt.c

📁 用于汇编领域的,运用于OS的MAIN函数.基于硬件基础的源代码
💻 C
字号:
#include "hos.h"static idt_selector_t __idt[IDT_ENTRIES];static idtr_t __idtr;void idt_traps_setup(void);void do_divide_error(void);void init_idt(void){	unsigned long idt_base_addr = (unsigned long) __idt;	/* setup idt entry */	/* ... */	idt_traps_setup();		__idtr.limit = 8 * IDT_ENTRIES;	__idtr.base = idt_base_addr;	__asm__ __volatile__ (		"lidt %0"		:		: "m" (__idtr)	);}/* These codes from linux-2.4.20 */#define _set_gate(gate_addr, type, dpl, addr) \do { \	int __d0, __d1; \	__asm__ __volatile__ ( \		"movw	%%dx, %%ax \n\t"\		"movw	%4, %%dx \n\t" \		"movl	%%eax, %0 \n\t" \		"movl	%%edx, %1"\		:"=m" (*((long *) (gate_addr))), \		 "=m" (*(1+(long *) (gate_addr))), "=&a" (__d0), "=&d" (__d1) \		:"i" ((short) (0x8000 + (dpl << 13) + (type << 8))), \		 "3" ((char *) (addr)), "2" (0x08 << 16)); \} while (0)void set_intr_gate(unsigned int n, void *addr){	_set_gate(__idt + n, 14, 0, addr);}static void set_trap_gate(unsigned int n, void *addr){	_set_gate(__idt + n, 15, 0, addr);}static void set_system_gate(unsigned int n, void *addr){	_set_gate(__idt + n, 15, 3, addr);}/* setting up trap & system call gate */void idt_traps_setup(void){	set_trap_gate(0, &divide_error);/*	set_trap_gate(1, &debug);	set_trap_gate(2, &nmi);	set_system_gate(3, &int3);	set_system_gate(4, &overflow);	set_system_gate(5, &bounds);	set_trap_gate(6, &invalid_op);	set_trap_gate(7, &device_not_available);	set_trap_gate(8, &double_fault);*/}void do_divide_error(void){	printk("[kernel trap]: divide_error\n");	STOP();}

⌨️ 快捷键说明

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