1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
[BITS 16] ;indique que l'on travaille en 16 bits
[ORG 0x0]
jmp _debut
;---------------------------------------------------------
;Initialisation des varriables :
;-msgboot une chaine de caractere
;---------------------------------------------------------
msgBoot db 'Bienvenue dans BOOTOS !',0
_debut:
;Initialisation des segments en 0x07C0 pour le boot
mov ax,0x07C0
mov ds,ax
mov es,ax
mov ax,0x8000
mov ss,ax
mov sp,0xf000
mov ax,0xb800 ;On initialise ax pour le mode video
mov es,ax ;es prend la valeur de ax
mov bx,0 ;Initialisation de bx
mov byte al,[msgBoot] ;al contient le premier caractere de msgboot
mov cx,0 ;Initialisation du compteur cx
;--------------------------------------------------------
;Procedure afficher message
;Affiche un message caractere par caractere en utilisant
;l'ecriture directe dans la memoire video
;--------------------------------------------------------
afficher_msg:
cmp al,0x0 ;On compare le contenu de al avec le caractere de fin nul
je fin ;Si egale on saute a fin
mov [es:bx],al ;On met le caracteere a l'adresse de la memoire video
add bx,1 ;On increment bx de 1
mov byte [es:bx],0x3 ;On definit l'attribut pour le caractere (ici 00000011b soit cyan sur fond noir)
add bx,1 ;On incremente bx de 1
add cx,1 ;On incremente cx de 1
mov dx,bx ;On range temporairement bx dans dx
mov bx,cx ;bx prend la valeur du compteur cx
mov byte al,[msgBoot+bx] ;On passe au caractere suivant
mov bx,dx ;bx reprend sa valeur
jmp afficher_msg ;On affiche les caracteres suivant
fin:
times 510-($-$$) db 0 ;On boucle pour avoir un fichier de 512 octets
dw 0xAA55 |
Partager