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
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    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
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    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
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    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
    18 260
    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 : 18 260
    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
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2016
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    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 Expert
    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
    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