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 :

[Tutoriel] Pépin OS : apprendre à réaliser son propre système d'exploitation


Sujet :

Programmation d'OS Assembleur

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 9
    Points
    9
    Par défaut Exercice concernant de conception d'un système
    Bonsoir , svp , pour ne pas oublié ce que j'ai vu , pourrais-je avoir les exercices ou les projets concernant la conception des systèmes d'exploitation??

    Merci...

  2. #22
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 9
    Points
    9
    Par défaut Partie sur l'initialisation du poiteur de la GDT
    Salut , désolé pour le dérangement ....

    En fait je suis encore bloqué sur un module concernant la gdt , ...
    J'ai bien compris le principe , mais au niveau du code , je ne comprends pas grand chose....
    Quelqu'un pourra t-il m'aider sur le code , la parite où se trouve :l'initialisation du poiteur de la GDT??


    ....merci

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 9
    Points
    9
    Par défaut compiler un code 32 bits sur une architecture 64 bits
    Bonjour Mr , j'ai compris sagement votre cours sur comment concevoir son propre noyau.
    Cependant , j'ai un souci sur la partie : "Ecrire un noyau en c"

    En suivant votre principe de compilation , je me suis rendu compte que la compilation de votre cour se fait sur une architecture 32 bits , mais le mien est sur 64 bits... donc mes compilations à partir de ce niveau se déroule avec plusieurs échecs .

    S'il vous plaît Mr , pourrez vous m'aidez ou me donner des indices pour que je puisse continuer votre cour ?

    Merci

  4. #24
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Un processeur 64 bits peut exécuter du code 32 bits.

    Pour la compilation, un compilateur 64 bits génèrera du code 64 bits, mais pourra générer du 32 bits si on lui demande.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #25
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Points : 9
    Points
    9
    Par défaut Sortie inattendue lors de l'impression directe dans la mémoire vidéo texte
    Salut tout le monde , j'ai un probleme au niveau de la sortie du message dans la mémoire video :

    Je vous laisse admirez le code :

    Code pour le secteur boot :


    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
    91
    92
    %define BASE_KERNEL 		0x100	;base du noyau
    %define KERNEL_SIZE_DRIVER 	100	;nombre de secteur à lire pour charger le noyau
     
    bits 16
    org 0x0000
     
    jmp start_bootsector
     
    %include "print_bootsector.INC"
    %include "load_kernel.INC"
     
    start_bootsector :
     
    	mov ax, 0x07c0
    	cli
       	mov ds, ax
    	mov es , ax
    	mov ax , 0x0000
     
    	mov ss , ax
    	mov sp , 0xf000
     	sti
     
     
    	mov si, msg_boot
    	call print_boot
     
    	mov si , msg_kernel
    	call print_boot
     
    	mov [bootdrv] , dl
     
     
    	call get_status_drive 
     
    ; initialisation du pointeur sur la GDT
        mov ax, gdtend    ; calcule la limite de GDT
        mov bx, gdt
        sub ax, bx
        mov word [gdtptr], ax
     
        xor eax, eax      ; calcule l'adresse lineaire de GDT
        xor ebx, ebx
        mov ax, ds
        mov ecx, eax
        shl ecx, 4
        mov bx, gdt
        add ecx, ebx
        mov dword [gdtptr+2], ecx
     
    ; passage en modep
        cli
        lgdt [gdtptr]    ; charge la gdt
        mov eax, cr0
        or  ax, 1
        mov cr0, eax        ; PE mis a 1 (CR0)
     
        jmp next
    next:
        mov ax, 0x10        ; segment de donne
        mov ds, ax
        mov fs, ax
        mov gs, ax
        mov es, ax
        mov ss, ax
        mov esp, 0x9F000    
     
        jmp dword 0x8:0x1000    ; reinitialise le segment de code
     
    msg_boot db 10,'Chargement du boot sans aucune verification' , 13 , 10 , 0
    msg_kernel db 'Chargement du noyau sans aucune verification' ,13 ,10,0
     
    bootdrv : db 0
     
    gdt:
        db 0, 0, 0, 0, 0, 0, 0, 0
    gdt_cs:
        db 0xFF, 0xFF, 0x0, 0x0, 0x0, 10011011b, 11011111b, 0x0
    gdt_ds:
        db 0xFF, 0xFF, 0x0, 0x0, 0x0, 10010011b, 11011111b, 0x0
    gdtend:
    ;--------------------------------------------------------------------
    gdtptr:
        dw 0  ; limite
        dd 0  ; base
    ;--------------------------------------------------------------------
     
     
     
      times 510-($-$$) db 0
       db 0x55
       db 0xAA
    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
    ;charger le secteur de kernel en memoire
     
     
    	get_status_drive :
     
    			xor ax , ax
    			int 0x13
     
     
    load_kernel :
     
    		push es
    		mov ax , BASE_KERNEL
    		mov es , ax
    		mov bx , 0
    		mov ah , 2
    		mov al , KERNEL_SIZE_DRIVER
    		mov ch , 0
    		mov cl , 2
    		mov dh , 0
    		mov dl , [bootdrv]
    		int 0x13
    		pop es
    		ret

    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
    cld
     
    print_boot : 
    	push ax
    	push bx
    aff :
    	lodsb
       	cmp al , 0; zero=end or str
       	jz exit_print_boot   ; get out
       	mov ah, 0x0E
       mov bh, 0
    mov bl , 0x0001
       int 0x10
       jmp aff
     
    exit_print_boot :
    	pop bx
    	pop ax
    	ret
    Bon à ce niveau , je ne vois aucun problème .
    Maintenant , j'ai un certains cas :
    le cas ou j'écris sur la mémoire vidéo , tout ce passe bien , je donne un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bits 32
     
    mov byte [0xb8000] , 'H'
    mov byte [0xb8001] , 0x57
     
    end : jmp end
     
     
    msg db 'premier message de chargement',13,10,0
    l'autre cas , est au niveau du fait que je decide d'écrire dans la mémoire video en c :

    on va l'appeler screen.c

    Code C : 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
    #include "types.h"
     
    static int kx = 0 ;
    static u8 *container ;
     
    static inline putchar(u8 c)
    {
    container = (u8*)0xb8000 ;
     
    container[kx] = c ;
    conainer[kx+1] = 0x57 ;
     
    kx +=2 ;
     
    }
     
    void print(char *s)
    {
    while(*s != 0)
    { putchar(*s) ;s++ ; }
    }

    types.h :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef _I386_TYPE_
    #define _I386_TYPE_
     
    typedef unsigned char u8;
    typedef unsigned short u16;
    typedef unsigned int u32;
    typedef unsigned char uchar;
     
    #endif

    Maintenant regardons le kernel :

    kernel.asm :

    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
    bits 32
     
    extern print
     
    global _start
     
    _start :
     
    mov eax, msg
    push eax
    call print
    pop eax
     
    end : jmp end
     
     
    msg db 'premier message de chargement',13,10,0

    Maintenant je lance le code shell pour les compilations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gcc -m32 screen.c -o screen.o
    nasm -f elf32 -o kernel.o kernel.asm
    ld -m elf_i386 -Ttext 1000 kernel.o screen.o -o kernel
    nasm -f bin -o boot boot.asm
    cat boot kernel /dev/zero | dd of=floppyA bs=512 count=2880
    Sur ce deuxième cas , rien ne s'affiche , je ne sais pas pourquoi .
    Qulequ'un pourra m'aider ??

  6. #26
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Un GRAND merci à Michelizza pour ce magnifique tutorial !

    Depuis un bon moment, je m'intéresse au fonctionnement du mode protégé du microprocesseur, et de la manière dont sont gérés les accès à la mémoire, les privilèges et compagnie. Et là, je tombe sur ce tuto... J'ai commencé à le lire, et dès le début, c'est passionnant !

Discussions similaires

  1. Réponses: 12
    Dernier message: 22/04/2016, 13h53
  2. Réponses: 0
    Dernier message: 20/10/2015, 16h46
  3. Créer son propre système de fichiers
    Par L'immortel dans le forum Programmation d'OS
    Réponses: 15
    Dernier message: 15/12/2013, 22h16
  4. Réaliser son propre CMS ?
    Par soony dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 26/08/2007, 14h06
  5. Utiliser son propre système d'éclairage
    Par nicoenz dans le forum OpenGL
    Réponses: 6
    Dernier message: 07/05/2007, 16h00

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