global entrypoint ; the entry point symbol defined in kernel.ld extern mainKernel ; indique la fonction ne se trouve pas dans ce fichier ; Values for the multiboot header MULTIBOOT_HEADER_MAGIC equ 0x1BADB002 MULTIBOOT_HEADER_FLAGS equ 0x0 ; magic + checksum + flags must equal 0 MULTIBOOT_HEADER_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) STACK_SIZE equ 256000 ;--------------------------------------------------------------------------------------------------- ; bootloader section ; This section must be located at the very beginning of the kernel image. section .bootloader align 4 ; section aligned to a 4 bytes boundary ; Minimum multiboot header dd MULTIBOOT_HEADER_MAGIC dd MULTIBOOT_HEADER_FLAGS dd MULTIBOOT_HEADER_CHECKSUM entrypoint: ; Bootloader code starts executing here cli ; disable hardware interrupts ; TODO : initialiser le pointeur de pile ainsi qu'EBP (à la même valeur) ; Rappel : la pile "grandi" en descendant ! ; ... mov esp, stack ; l'adresse de la pile est defini par le label 'stack' add esp, STACK_SIZE ; on deplace le pointeur de pile a la fin de la pile mov ebp, esp ; TODO : appeler la fonction principale du kernel (code C) ; Celle-ci doit etre visible par le linker ; ... call mainKernel ; infinite loop (should never get here) .forever: hlt jmp .forever ;--------------------------------------------------------------------------------------------------- ; stack section ; TODO : ajouter une section pour la pile kernel dans laquelle ; reserver au moins 256KB grace a la directive "resb". ; Cette section devra etre alignee sur 4 bytes. ; ... section .stack stack: resb STACK_SIZE