nuclear@7: .data nuclear@7: off:.long 0 nuclear@7: seg:.short 0 nuclear@7: nuclear@7: .align nuclear@7: .short 0 nuclear@7: gdt_lim: nuclear@7: .short 0 nuclear@7: gdt_addr: nuclear@7: .long 0 nuclear@7: nuclear@7: .text nuclear@7: /* setup_selectors(uint16_t code, uint16_t data) nuclear@7: * loads the requested selectors to all the selector registers */ nuclear@7: .globl setup_selectors nuclear@7: setup_selectors: nuclear@7: /* setup data selectors */ nuclear@7: movl 8(%esp), %eax nuclear@7: movw %ax, %ss nuclear@7: movw %ax, %es nuclear@7: movw %ax, %ds nuclear@7: movw %ax, %gs nuclear@7: movw %ax, %fs nuclear@7: /* setup code selector */ nuclear@7: movl 4(%esp), %eax nuclear@7: movw %ax, (seg) nuclear@7: movl $ldcs, (off) nuclear@7: ljmp *off nuclear@7: ldcs: nuclear@7: ret nuclear@7: nuclear@7: /* set_gdt(uint32_t addr, uint16_t limit) nuclear@7: * loads the GDTR with the new address and limit for the GDT */ nuclear@7: .globl set_gdt nuclear@7: set_gdt: nuclear@7: movl 4(%esp), %eax nuclear@7: movl %eax, (gdt_addr) nuclear@7: movw 8(%esp), %ax nuclear@7: movw %ax, (gdt_lim) nuclear@7: lgdt (gdt_lim) nuclear@7: ret