Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > Programmation d'OS
Programmation d'OS Programmation de systèmes d'exploitation
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/12/2010, 11h01   #1
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 433
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 4 433
Points : 10 861
Points : 10 861
Par défaut GDT manifestement incorrecte

Bonjour,

j'ai regardé le code ici et j'ai pondu un petit bout de code pour TASM mais il ne fonctionne pas

le programme doit afficher ABC en bas de l'écran texte...A et C en mode réel, B en mode protégé...sauf que B ne s'affiche pas, et que deux lignes en commentaire qui sont nécessaire à son affichage plante la machine virtuelle

où est mon erreur de GDT ?

Code :
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
 
.MODEL TINY
.CODE
.386
ORG 100h
start:
  PUSH CS
  POP  DS
 
  MOV AX,0B800h
  MOV ES,AX
  MOV WORD PTR ES:[2 * 80 * 24],0141h ; AFFICHE 'A'
 
; disable IRQ's
  CLI
; disable NMI's
  IN  AL,70h
  OR  AL,80h
  OUT 70h,AL
 
 
  XOR EAX,EAX
  MOV AX,CS
  SHL EAX,4
  ADD DWORD PTR [GDT + 2], EAX
 
 
.386p
  MOV eax,cr0 ; read cr0
  OR  al ,1   ; set CR0.PM bit to 1
  MOV cr0,eax ; switch to PM mode !
 
  mov bx,GDT
  ;lgdt [bx] <-- plante
 
  MOV AX,10h
  ;MOV ES,AX  <--- plante
  MOV WORD PTR ES:[0B8000h + 2 * 80 * 24 + 2],0242h ; AFFICHE 'B'
 
  mov eax,cr0 ; read cr0
  and al,254  ; set CR0.PM bit to 0
  mov cr0,eax ; switch to real mode !
.386p
 
  PUSH CS
  POP  DS
 
  MOV AX,0B800h
  MOV ES,AX
  MOV WORD PTR ES:[2 * 80 * 24 + 2],0343h ; AFFICHE 'C'
 
  RET
 
; NULL
 GDT_00 DW 0  ; len
        DW 0  ; base low
        DB 0  ; base high
        DB 0  ; access
        DB 0  ; attribs
        DB 0  ; base ext
; CODE32
 GDT_08 DW 0ffffh    ; len
        DW 0h        ; base low
        DB 0         ; base high
        DB 10011011b ; access
        DB 11011111b ; attribs
        DB 0         ; base ext
; DATA32
 GDT_10 DW 0ffffh    ; len
        DW 0h        ; base low
        DB 0         ; base high
        DB 10010011b ; access
        DB 11011111b ; attribs
        DB 0         ; base ext
 
GDT DW $ - GDT_00
    DW GDT_00
    DW 0
 
END start
Merci

--- SOLUTION ---
1) MOV BX, OFFSET GDT
2) le caractère C doit être à un offset + 4 sinon il remplace B
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h37.


 
 
 
 
Partenaires

Hébergement Web