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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
.model tiny
.code
ORG 0
start:
; initialisation des segments en 0x07C00
ADR_BOOT = 07c0h
ADR_VIDEO = 0B8A00h
mov ax, ADR_BOOT
mov ds, ax
mov es, ax
mov ax, 8000h
mov ss, ax
mov sp, 0f000h ; stack de 0x8F000 -> 0x80000
; affiche un msg
mov si, OFFSET msgDebut2
call afficher
boucle:
jmp boucle
;---------------------------------------------------------
; Synopsis: Affiche une chaine de caracteres se terminant par 0x0
; Entree: DS:SI -> pointe sur la chaine a afficher
;---------------------------------------------------------
afficher:
push AX
push BX
MOV BX, 0B800h
MOV ES, BX
XOR AX, AX
XOR BX, BX
XOR DX, DX
;Récupaire le mot du poid fort de la position du cursor
;et le met dans le mot de poid fort de BX ( BH )
MOV AX, 14
MOV DX, 3D4h
OUT DX, AX
MOV DX, 3D5h
IN AX, DX
MOV BH, AL
;Récupaire le mot du poid faible de la position du cursor
;et le met dans le mot de poid faible de BX ( BL )
MOV AX, 15
MOV DX, 3D4h
OUT DX, AX
MOV DX, 3D5h
IN AX, DX
MOV BL, AL
XOR AX, AX
debut:
lodsb ; ds:si -> al
CMP AL, 0 ; fin chaine ?
JE fin
CMP AL, 13
JE saut_ligne
CMP AL, 10
JE saut_ligne
;Affichage
MOV BYTE PTR ES:[BX], AL
INC BX
MOV BYTE PTR ES:[BX], 00000001b
INC BX
saut_ligne:
JMP debut
fin:
POP BX
POP AX
RET
;--- Variables ---
msgDebut2 BYTE "BootStrap Par Luc Spinelli", 13, 10, 0
curosrPos WORD ?
;-----------------
;--- NOP jusqu'a 510 ---
BYTE 510-($ - start) DUP( 90h )
WORD 0AA55h
end start |
Partager