www.pudn.com > LFYOS.zip > task.s
.global setup_task setup_task: /*this function setup tss, and put it into GDT*/ movl 0x04(%esp),%eax; movl $(0xc0000800),%eax movl %eax,tss_esp0 movl $(0x00000018),tss_ss0 movl $(0x00),tss_ss1 movl $(0x00),tss_ss2 movl $(page_dir),tss_cr3 andl $(0x3fffffff),tss_cr3 lea gdt_table,%edi lea tss,%eax shll $(0x10),%eax addl $(tss_end-tss),%eax lea tss,%edx movl %edx,%ecx shrl $(0x10),%ecx movb %cl,%dl andl $(0xff0000ff),%edx orl $(0x00008900),%edx movl %eax,1*8(%edi) movl %edx,4+1*8(%edi) lgdt gdt_descr movw $(0x08),%ax ltr %ax ret .align 16 tss: .long 0 /*00: (0,LINK)*/ tss_esp0: .long 0xc0000800 /*04: ESP0 */ tss_ss0: .long 0x18 /*08: (0,SS0) */ tss_esp1: .long 0 /*0C: ESP1 */ tss_ss1: .long 0 /*10: (0,SS1) */ tss_esp2: .long 0 /*14: ESP2 */ tss_ss2: .long 0 /*18: (0,SS2) */ tss_cr3: .long 0 /*1C: CR3 */ tss_reg: .long 0 /*20: EIP */ .long 0 /*24: EEFLAG */ .long 0 /*28: EAX */ .long 0 /*2C: ECX */ .long 0 /*30: EDX */ .long 0 /*34: EBX */ .long 0 /*38: ESP */ .long 0 /*3C: EBP */ .long 0 /*40: ESI */ .long 0 /*44: EDI */ .long 0x2b /*48: (0,ES) */ .long 0x23 /*4C: (0,CS) */ .long 0x2b /*50: (0,SS) */ .long 0x2b /*54: (0,DS) */ .long 0x2b /*58: (0,FS) */ .long 0x2b /*5C: (0,GS) */ .long 0 /*60: (0,LDT) */ .long 0 /*64: (IObitmap, 0T*/ .org tss+0x70 tss_end: