IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation d'OS Assembleur Discussion :

Passage en protected mode


Sujet :

Programmation d'OS Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Passage en protected mode
    Bonjour tout le monde, j'ai découvert un bon tuto sur le net : The booting process by Gergor Brunmar

    Il est vraiment bien, j'ai compris le principe de la GDT, donc la je suis au 2eme chapitre qui est basé sur le passage du protected mode (ici), mais je bloque dans une partie du code, le voici en entier :

    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
    [BITS 16]       ; We need 16-bit intructions for Real mode
     
    [ORG 0x7C00]    ; The BIOS loads the boot sector into memory location 0x7C00
     
            cli                     ; Disable interrupts, we want to be alone
     
            xor ax, ax
            mov ds, ax              ; Set DS-register to 0 - used by lgdt
     
            lgdt [gdt_desc]         ; Load the GDT descriptor
     
            mov eax, cr0            ; Copy the contents of CR0 into EAX
            or eax, 1               ; Set bit 0
            mov cr0, eax            ; Copy the contents of EAX into CR0
     
            jmp 08h:clear_pipe      ; Jump to code segment, offset clear_pipe
     
     
    [BITS 32]                       ; We now need 32-bit instructions
    clear_pipe:
            mov ax, 10h             ; Save data segment identifyer
            mov ds, ax              ; Move a valid data segment into the data segment register
            mov ss, ax              ; Move a valid data segment into the stack segment register
            mov esp, 090000h        ; Move the stack pointer to 090000h
     
            mov byte [ds:0B8000h], 'P'      ; Move the ASCII-code of 'P' into first video memory
            mov byte [ds:0B8001h], 1Bh      ; Assign a color code
     
    hang:
            jmp hang                ; Loop, self-jump
     
     
    gdt:                    ; Address for the GDT
     
    gdt_null:               ; Null Segment
            dd 0
            dd 0
     
    gdt_code:               ; Code segment, read/execute, nonconforming
            dw 0FFFFh
            dw 0
            db 0
            db 10011010b
            db 11001111b
            db 0
     
    gdt_data:               ; Data segment, read/write, expand down
            dw 0FFFFh
            dw 0
            db 0
            db 10010010b
            db 11001111b
            db 0
     
    gdt_end:                ; Used to calculate the size of the GDT
     
     
     
    gdt_desc:                       ; The GDT descriptor
            dw gdt_end - gdt - 1    ; Limit (size)
            dd gdt                  ; Address of the GDT
     
     
     
     
    times 510-($-$$) db 0           ; Fill up the file with zeros
     
            dw 0AA55h                ; Boot sector identifyer
    Ce que je ne comprend pas c'est entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jmp 08h:clear_pipe      ; Jump to code segment, offset clear_pipe
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            mov esp, 090000h        ; Move the stack pointer to 090000h
    A part la commande [BITS 32].

    Si quelqu'un pouvait m'expliquer clairement cette partie du code (surtout le jmp : pourquoi 08h ? et pourquoi mettre ds et ss a 10h ?)

    EDIT: je croit que j'ai compris pour 08h : on saute la gdt null (puisque une gdt fait 2 DWORD) et pour la stack : on choisi juste un emplacement libre on aurait pu mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mov esp, 095600h        ; Move the stack pointer to 095600h
    par example c'est ca ? Sinon pour le 10h je suis toujours perdu..

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Points : 170
    Points
    170
    Par défaut
    8h correspond à l'index du descripteur de segment de code dans la GDT
    10h correspond à l'index du descripteur de segment de données

    Le jump far réinitialise le sélecteur de segment de code.
    Ensuite, on réinitialise les sélecteurs des segments de données et de pile.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Protection mode création par mot de passe
    Par lerg89 dans le forum IHM
    Réponses: 2
    Dernier message: 03/09/2013, 16h49
  2. Passage automatique en mode httpS
    Par mapmip dans le forum Apache
    Réponses: 2
    Dernier message: 25/03/2013, 14h45
  3. [Tiny MCE] Offset sur <p> lorsque passage en edit mode :'(
    Par Nadinette dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 18/03/2013, 13h50
  4. Passage application en mode administrateur
    Par dvince94 dans le forum Windows
    Réponses: 4
    Dernier message: 23/02/2013, 11h05
  5. Passage en Long mode (64 bits mode) par AMD
    Par Belegkarnil dans le forum Programmation d'OS
    Réponses: 2
    Dernier message: 07/11/2008, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo