Bonjour,

J'essaye de faire un test d'utilisation de l'exception 13 pour gérer une segmentation fault et je n'arrive pas. Mon code fonctionne avec l'exception 0 ( divison par 0 ). si quelqu'un peut éclairer ma lanterne.... Merci d'avance :

Mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 r‚serv&s
db 2                                    ; nbre de fats
dw 224                                  ; nbres entr‚es 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 tˆtes
dd 0                                    ; secteurs cach‚s
dd 0                                    ; 32 bits tot sect
db 0                                    ; 80h=1rst hd
db 0                                    ; r‚serv‚
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: