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

📄 seg.h

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 H
字号:
#ifndef _ASM_SEGMENT_H#define _ASM_SEGMENT_H#define NULLIDX		0#define KCODEIDX	1#define KDATAIDX	2#define LDTIDX		3#define	TSS0IDX		4 #define TSS1IDX  	5	#define	NULLSEL		(NULLIDX <<3)#define KCODESEL	(KCODEIDX << 3)#define KDATASEL	(KDATAIDX << 3)#define	LDTSEL		(LDTIDX << 3)#define TSS0SEL		(TSS0IDX << 3)#define TSS1SEL		(TSS1IDX << 3)#define UCODEIDX	1#define UDATAIDX	2#define	UCODESEL	((UCODEIDX << 3) + 7)#define	UDATASEL	((UDATAIDX << 3) + 7)#ifndef __ASSEMBLY__struct i387_t {	u32_t cw; /* control word (16 bits) */	u32_t sw; /* status word (16 bits) */	u32_t tw; /* tag word (16 bits) */	u32_t ip; /* instruction pointer */	u16_t cs; /* code segment seleector */	u16_t op; /* opcode last executed (11 bits) */	u32_t oo; /* floating operand offset */	u32_t os; /* floating operand segment selector */	u8_t regs[80];};struct tss_t {	u32_t	backlink;	/* 16 high bits zero */	u32_t	esp0;	u32_t	ss0;		/* 16 high bits zero */	u32_t	esp1;	u32_t	ss1;		/* 16 high bits zero */	u32_t	esp2;	u32_t	ss2;		/* 16 high bits zero */	u32_t	cr3;	u32_t	eip;	u32_t	eflags;	u32_t	eax;	u32_t	ecx;	u32_t	edx;	u32_t	ebx;	u32_t	esp;	u32_t	ebp;	u32_t	esi;	u32_t	edi;	u32_t	es;		/* 16 high bits zero */	u32_t	cs;		/* 16 high bits zero */	u32_t	ss;		/* 16 high bits zero */	u32_t	ds;		/* 16 high bits zero */	u32_t	fs;		/* 16 high bits zero */	u32_t	gs;		/* 16 high bits zero */	u32_t	ldt;		/* 16 high bits zero */	u32_t	tracebitmap;	/* bits: trace 0, bitmap 16-31 */};struct segsel_t {	unsigned rpl:2,		/* request privilege level */		 ti:1,		/* table index : 0 select gdt,1 select ldt */		 idx:13;	/* index */} __attribute__((packed));struct gdtdes_t {	u16_t limit;	u32_t base;} __attribute__((packed));typedef gdtdes_t idtdes_t;/* type: for appseg -- 0x2 = read/write, 0xa = read/exec,         for sysseg -- 0x2 = ldt, 0x9 = avl386tss, 0xe = 386intrgate, 		       0xf = 386trapgate   appseg: 1 = application segment, 0 = ldt/tss/gate    dpl: desriptor privilege level   p: present */struct segattr_t {	unsigned type:4, appseg:1, dpl:2, p:1; };/* application segment attribute byte */#define X86UCODE 	0xfa#define X86UDATA	0xf2#define X86KCODE	0x9a#define X86KDATA	0x92/* system segment attribute byte */#define X86LDT		0x82#define X86AVL386TSS	0x89#define X86386INTR	0x8e#define X86386TRAP	0x8f#define X86SYSCALL	0xef /* dpl=3, system call gate *//* limlo: limit low   limhi: limit high   baselo: base low   basemi: base middle   basehi: base high   avl: avalialbe bits   d: default size, 0 = 16 bit, 1 = 32 bit   g: granularity, 0 = byte, 1 = page */struct appseg_t {	u16_t limlo;	u16_t baselo;	u8_t basemi;	u8_t attr; 	u8_t limhi; /* unsigned limhi:4, avl:1, pad:1, d:1, g:1; */	u8_t basehi;	/* set application segment : code and data */	void init(u8_t attr_, u32_t base, u32_t rawlim)	{		attr = attr_;		baselo = base & 0xffff; 		basemi = (base >> 16) & 0xff;		basehi = base >> 24;		limlo = rawlim & 0xffff;		limhi = 0xc0 | (rawlim >> 16); /* g = 1, d = 1 */	}} __attribute__((packed));struct sysseg_t {	u16_t limlo;	u16_t baselo;	u8_t basemi;	u8_t attr; 	u8_t limhi; /* unsigned limhi:4, pad:3, g:1; */	u8_t basehi;	/* set system segment: ldt and tss */	void init(u8_t attr_, u32_t base, u32_t rawlim)	{		attr = attr_;		baselo = base & 0xffff; 		basemi = (base >> 16) & 0xff;		basehi = base >> 24;		limlo = rawlim & 0xffff;		limhi = 0 | (rawlim >> 16); /* g = 0, d = 0 */	}} __attribute__((packed));struct sysgate_t {	u16_t offlo;	u16_t sel;	u8_t dwordcount; /* unsigned dwordcount:5, pad:3; */	u8_t attr;	u16_t offhi;	/* set system gate : interrupt gate, exception gate */ 	void init(u8_t attr_, u16_t sel_, u32_t offset)	{		attr = attr_; 		sel = sel_;		offlo = offset & 0xffff;		offhi = offset >> 16;		dwordcount = 0;	}} __attribute__((packed));struct gdt_t {	appseg_t null;	appseg_t kcode;	appseg_t kdata;	sysseg_t ldtdes;	sysseg_t tss[2];	void init();	void swtch(tss_t * from, tss_t * to);}__attribute__((aligned(8)));extern gdt_t gdt;extern inline void longjump(tss_t* from, tss_t* to){	gdt.swtch(from, to);}struct ldt_t {	appseg_t null;	appseg_t ucode;	appseg_t udata;	void init();}__attribute__((aligned(8)));struct idt_t {	sysgate_t sysgate[256];	void init();}__attribute__((aligned(8)));#endif /* __ASSEMBLY__ */#endif

⌨️ 快捷键说明

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