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
| [ORG 7c00h]
[BITS 16]
jmp start ; code saut
3eh
db "essai " ; saut
dw 512 ; octets / secteurs
db 1 ; scteurs / clusters
dw 1 ; secteurs boot et rserv&s
db 2 ; nbre de fats
dw 224 ; nbres entres root maxi
dw 2880 ; total secteurs dans media
db 0f0h ; media descriptor
dw 9 ; nbre secteurs / fat
dw 18 ; secteurs / piste
dw 2 ; nbre de ttes
dd 0 ; secteurs cachs
dd 0 ; 32 bits tot sect
db 0 ; 80h=1rst hd
db 0 ; rserv
db 29h ; extended boot record ( toujours 29h)
dd 0 ; s/n volume
db "ENOSBOOTDIS" ; label volume
db "FAT12 " ; FAT12 ou FAT16
start:
push dword 0
popfd
lgdt [gdtr]
mov eax,cr0
or al,1
mov cr0,eax
jmp SEGMENT_SYSTEME:suite
[BITS 32]
suite:
mov edi,idt
add edi,13*8 ; pour exception 13 : general protection fault
mov eax,SEGMENT_SYSTEME
shl eax,16
mov ax,fault
stosd
mov eax,0x8e00
stosd
lidt [idtr]
jmp 0x12000
jmp $
fault:
nop
nop
nop
mov byte [0xb8000],"*"
jmp $
gdtr:
dw gdt_fin - gdt
dd gdt
idtr:
dw 256*8
dd idt
gdt:
dd 0
dd 0
SEGMENT_SYSTEME equ $-gdt
dd 00009000h
dd 00409a00h
SEGMENT_DATAS equ $-gdt
dd 00009000h
dd 00409200h
gdt_fin:
idt:
times 330 db 0
db 55h,0aah
fin: |
Partager