prog01 : -------- [BITS 16] ; indique a nasm que l'on travaille en 16 bits [ORG 0x0] ; initialisation des segments en 0x07C0 mov ax,0x07C0 mov ds,ax mov es,ax mov ax,0x8000 ; stack en 0xFFFF mov ss,ax mov sp, 0xf000 ; affiche un msg mov si,msgDebut call afficher end: jmp end ;--- Variables --- msgDebut db "Hello world !",13,10,0 ;----------------- ;--------------------------------------------------------- ; Synopsis: 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 dw 0xAA55 |
Que fait exactement ce programme ?
[BITS 16] ; indique a nasm que l'on travaille en 16 bits
; initialisation des segments en 0x07C0 mov ax,0x07C0 mov ds,ax mov es,ax
mov ax,0x8000 ; stack en 0xFFFF mov ss,ax mov sp, 0xf000On a donc :
; affiche un msg mov si,msgDebut call afficher
end: jmp end
msgDebut db "Hello world !",13,10,0
;--- NOP jusqu'a 510 --- times 510-($-$$) db 144 dw 0xAA55Cette directive ajoute du bourrage sous forme d'octets a zero puis le mot 0xAA55 afin que le binaire genere fasse 512 octets. Le mot 0xAA55 en fin de secteur est une signature pour que celui-ci soit reconnu comme etant un MBR valide.
$ nasm -f bin -o bootsect bootsect.asm |
Pour lancer le secteur de boot, il faut copier le binaire sur une disquette :
$ dd if=bootsect of=/dev/fd0 |
Ensuite il faut rebooter sa machine avec cette disquette inseree.
C'est tres penible car un PC fait tout un tas de tests plus ou moins
longs au demarrage et les possibilites de debogage sont tres
limitees. Heureusement, il existe un emulateur de PC qui tourne sur un tres
grand nombre de plateformes : "bochs" .
Cet emulateur est distribue avec une documentation claire et je vous invite a l'essayer.