Bonjour, je me mets depuis peu de temps à l'assembleur et je suis tombé sur un très bon tutoriel sur l'écriture d'un secteur de boot (ici)
Je pensais avoir pas trop mal pigé le truc jusqu'à ce que j'essaye de modifier le code.
En fait, je m'apprête à passer en mode protégé et voila ce que je fais :
Il se trouve qu'à l'execution, ça ne fonctionne pas alors que ce code fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 mov bx, gdtend mov ax, gdt sub bx, ax mov word [gdtptr], bx mov word [gdtptr+2], ds mov word [gdtptr+4], gdt lgdt [gdtptr]
Intuitivement, je pensais qu'entre faire l'addition dans les registres de XXXX0000 + YYYY et placer un dword a une adresse revenait au même que mettre xxxx à une adresse [add] et YYYY a [add+2] ?
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 mov ax, gdt mov bx, gdtend sub bx, ax mov word [gdtptr], bx; xor eax, eax mov ax, ds shl eax, 4 xor ebx, ebx mov ebx, gdt add eax, ebx mov dword [gdtptr+2], eaxx lgdt [gdtptr]mov ax, gdt mov bx, gdtend sub bx, ax mov word [gdtptr], bx;on met la limite (16 bits) ;on doit maintenant linéariser l'adresse de la gdt xor eax, eax mov ax, ds shl eax, 4 xor ebx, ebx mov ebx, gdt add eax, ebx mov dword [gdtptr+2], eax ;On va effectuer le passage cli lgdt [gdtptr]
Si quelqu'un a la gentilesse de me mettre sur la voie ?
Merci d'avance
Partager