Le but de cet article est de présenter comment coder un petit hello world au boot d'un PC.
Rappels sur le démarrage d'un PC
- Le premier programme qui démarre est le bios
- Il effectue des contrôles sur le PC
- Il initialise les périphériques
- Il charge le secteur de boot et il l'éxécute
Le secteur de bootRappel : un programme en assembleur se présente sous la forme d'une suite d'octets
Un secteur de boot contient :
- Des informations donnant les caractéristiques du disque
- Les octets du programme de secteurs de boot
- 2 octets magiques indiquant que le disque est bootable
- Le seul secteur chargé automatiquement par le bios
- Il stocke moins de 512 octets pour le programme
Le source
[BITS 16]
[ORG 0x0]
; initialisation des segments en 0x07C0
mov ax,0x07C0
mov ds,ax
mov es,ax
mov ax,0x8000
mov ss,ax
mov sp, 0xf000
;--- les données ---
msgDebut db "Hello world OS is running ! ",13,10,0
; Affiche une chaine de caracteres se terminant par 0x0
; Entree: DS:SI -> pointe sur la chaine a afficher
afficher:
push ax
push bx
.debut:
lodsb ; ds:si -> al
cmp al,0 ; fin chaine ?
jz .fin
mov ah,0x0E ; appel au service 0x0e, int 0x10 du bios
mov bx,0x07 ; bx -> attribut, al -> caractere ascii
int 0x10
jmp .debut
.fin:
pop bx
pop ax
ret
;--- NOP jusqu'a 510 ---
times 510-($-$$) db 144
; nombre magique : indique au pc que le secteur est bootable
dw 0xAA55