void _cdecl kernel_entry(multiboot_info* mBootInfo) { #ifdef _MSC_VER _asm mov kernelSize,edx #endif #ifdef ARCH_X86 _asm { cli mov ax,10h mov ds,ax mov es,ax mov fs,ax mov gs,ax } #endif bootinfo = mBootInfo; setup(); InitializeConstructors(); main(); Exit(); // Add code here to turn the computer off. #ifdef ARCH_X86 _asm cli _asm hlt #endif for(;;); }
//! kernel entry point is called by boot loader void __cdecl kernel_entry (multiboot_info* bootinfo) { #ifdef ARCH_X86 // Set registers for protected mode _asm { cli mov ax, 10h mov ds, ax mov es, ax mov fs, ax mov gs, ax } #endif //ARCH_X86 //dx 레지스터에는 커널의 크기가 담겨 있다. //다른값으로 씌워지기 전에 값을 얻어낸다. _asm mov word ptr[g_kernelSize], dx InitializeConstructors(); kmain (bootinfo); Exit (); console.Print("kernel_entry : Shutdown Complete. Halting system\n"); #ifdef ARCH_X86 _asm { cli hlt } #endif for (;;); }