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 :

[OS] Coder un nouvel OS, qu'est-ce que on doit recoder ?


Sujet :

Programmation d'OS Assembleur

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Mais quelle est l'instruction à l'adresse 0000:07C00 ? Mov ax, 07C0h ??

    Donc les instructions se trouve dans le même ordre que je l'ai écrit ?

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Mais quelle est l'instruction à l'adresse 0000:07C00 ? Mov ax, 07C0h ??
    Donc les instructions se trouve dans le même ordre que je l'ai écrit ?
    Oui
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    J'essaye de tracer mon code afin de vérifier ce qui se passe exactement, mon fichier.bin contient exactement:

    B8C0078ED88EC0B800808ED0BC00F0BE1700E81200EBFE48656C6C6F20776F726C6420210D0A005053AC3C007409B40EBB0700CD10EBF25B58C3

    avec une suite de 90909090 ...55AA

    Comme l'instruction mov ax, 07C0h se trouve au début quelle est-elle exactement en base 16 ? elle fait combien d'octet ? est-ce B8C0078E du début ou plus ou moins d'octets ??

    J'ai essayé de trouver les équivalences en binaire des instructions dans la doc Intel mais je n'ai pas trouvé, c'est dans quel volume ?

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    J'ai essayé de trouver les équivalences en binaire des instructions dans la doc Intel mais je n'ai pas trouvé, c'est dans quel volume ?
    Volumes 2A et 2B
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Waahhh :o

    Je ne comprends rien

    Je m'attendais plus à un truc du genre: mov == 01101110 et la dépendamment des opérandes d'autres égalités

    Saurais-tu me guider un petit peu ?

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Je m'attendais plus à un truc du genre: mov == 01101110 et la dépendamment des opérandes d'autres égalités
    LOL mais tu sais l'asm c'est sensé être compliqué

    Je ne comprends rien (...)
    Saurais-tu me guider un petit peu ?
    Pourquoi ne comprends tu pas ? C'est parce que la doc est en anglais ? Que il y a trop de choses à lire ? Que tu trouves que c'est mal expliqué ? Qu'est ce que tu ne comprends pas en particulier ?
    Qu'est ce que tu as compris de l'organisation de la structure des instructions x86 ? (le chapitre du début) ? Pourrais tu en faire un résumé ?
    Comment as tu fais ton approche avec la doc ? Je te conseille ca (sérieusement) : commencer par le début, et finir par la fin Tu verras, ca prendra peut être beaucoup de temps, mais après, tu comprendras parfaitement tout, dans les moindres détails... Peut être serait il interressant que tu nous/me fasse part de tes avancées, dans ce topic, en précisant bien quelles ont été tes difficultés...
    Tu ne trouveras pas d'autres docs, c'est la seule qui existe...
    Tu sais, tu ne comprendras pas toute cette doc d'un coup !

    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Je comprends l'anglais, assez pour le lire en tout cas

    Par exemple quand je lis le volume 2B déjà ça: ModR/M byte

    je ne sais pas ce que c'est, c'est du chinoix

    Il y a aussi

    OPCODE MAP
    D The reg field of the ModR/M byte selects a debug register (for example,
    MOV (0F21,0F23)).
    E A ModR/M byte follows the opcode and specifies the operand. The operand is either a
    general-purpose register or a memory address. If it is a memory address, the address is
    computed from a segment register and any of the following values: a base register, an
    index register, a scaling factor, a displacement.
    F EFLAGS Register.

    par exemple je n'ai aucune idée à quoi ça sert. Comme je disais je m'attendais plus à quelque chose du genre: Mov == 01101001


  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Je crois que je vais faire comme tu dis, je vais lire et au fur et à mesure si j'ai des questions je vais les poster ici, ça deviendra une analyse de la doc Intel ce topic

  9. #29
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Par exemple quand je lis le volume 2B déjà ça: ModR/M byte
    Rooo mais c'est simple, voyons !! C'est normal que tu ne comprennes pas si tu commence par la partie 2B (et pas 2A) !!
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Je me demandais une chose, est-il possible de faire un code en binaire pur et l'éxécuter sous un OS ? Par exemple windows ? J'imagine que dans le mieux que je pourrais faire serait de créer un exe Win32 pour Jmp sur à l'adresse de mon binaire pur, autrement comme dire à Windows d'exécuter mon code ?

    J'aurais aimé faire un petit jeu de pong exécutable sur tout les OS pour x86 en le faisant en binaire pur.

  11. #31
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    J'aurais aimé faire un petit jeu de pong exécutable sur tout les OS pour x86 en le faisant en binaire pur.
    Alors il te faudra un binaire par os (sans compter les compatibilités du style freebsd/nunux)...

    Je me demandais une chose, est-il possible de faire un code en binaire pur et l'éxécuter sous un OS ? Par exemple windows ? J'imagine que dans le mieux que je pourrais faire serait de créer un exe Win32 pour Jmp sur à l'adresse de mon binaire pur, autrement comme dire à Windows d'exécuter mon code ?
    Sur windows ca va être chaud !! Par contre sur nux (qui utilise une int pour les syscalls, donc plus facile à utiliser), et avec un ptit format elf modifié (pour être plus simple), c'est très faisable !
    Mais bon, le principe est interressant...
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  12. #32
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    C'est incroyable, j'apprends plein de trucs ici

    Merci à vous tous

    Mais pourquoi un binaire par OS ? c'est du binaire pur donc ça devrait fonctionner sur tout les OS non :

  13. #33
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Mais pourquoi un binaire par OS ? c'est du binaire pur donc ça devrait fonctionner sur tout les OS non
    Un binaire pur ne fonctionnera que lorsque tu démarre toi même le PC.

    A partir du moment où un OS digne de ce nom est lancé (cela exclu bien entendu MS-DOS), tu ne peux plus faire ce que tu veux. Windows, *BSD, Linux, KOS ... (bientôt Skan ...) passent en mode protégé, et créent des protection et des normes à respecter pour les acces à la mémoire, aux périfériques, aux systèmes de fichiers ...

    Les acces aux périphériques (la carte vidéo par exemple) ne se font pas de la même manière sous Linux que sous Windows ... donc tu ne peux pas avoir le même binaire, ni le même code (à moins que tu travaille en C, Java ...)

    sdx

    ps: comment ça j'explique mal ?

  14. #34
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Merci

    En ce qui me concerne, tu expliques très bien

    Donc je pourrais faire une série de jeu style Nintendo 8 bit qui fonctionnerait en binaire pur au démarrage du PC ?

    Un peu comme les vieux Apple IIe ou il fallait mettre une diskette de jeu au démarrage du PC

    Ça c'était géant

    Avec Bochs les gens pourront jouer à mes jeux sous Windows

    La j'ai un deuxième ordi, je vais le brancher pour tester le bootloader c'est idéal, parce que Bochs bug parfois

    Skan ? C'est une nouvelle distrib linux ??

    Par contre, si je veux accéder à plus de 1mb de mémoire il va faloir je passes en mode protégé n'est-ce pas ?

    Sur ce, si je fais un noyau, je dois passer en mode protégé (avant) de le loader ? Mais pour loader un fichier en mémoire, car le noyau n'est qu'un fichier en binaire pur que l'on a fait, j'imagine que tout les noyaux sont en binaire pur non ? Sinon je vois mal comment on peut faire exécuter un exe ou un format de fichier précis à un OS avant que son noyau soit chargé

    Mais pour cela, comment on charge un fichier en mémoire et ensuite y faire un jump ? Et il faut savoir aussi ou il va se retrouver en mémoire avant de faire un jump aussi. Sur le chargement du noyau je suis un peu perdu

  15. #35
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Skan ? C'est une nouvelle distrib linux ??
    Tu n'as pas lu la signature de 2PluS4 ? http://skan.developpez.com

    Par contre, si je veux accéder à plus de 1mb de mémoire il va faloir je passes en mode protégé n'est-ce pas ?
    Oui.

    Sur ce, si je fais un noyau, je dois passer en mode protégé (avant) de le loader ? Mais pour loader un fichier en mémoire, car le noyau n'est qu'un fichier en binaire pur que l'on a fait, j'imagine que tout les noyaux sont en binaire pur non ? Sinon je vois mal comment on peut faire exécuter un exe ou un format de fichier précis à un OS avant que son noyau soit chargé Laughing

    Mais pour cela, comment on charge un fichier en mémoire et ensuite y faire un jump ? Et il faut savoir aussi ou il va se retrouver en mémoire avant de faire un jump aussi. Sur le chargement du noyau je suis un peu perdu Laughing
    Ah ... je regrette d'être si lent : je suis justement en train d'écrire de la doc sur le sujet, mais elle n'est pas terminée En résumé :
    • Tu peux faire ce que tu veux, il suffit que tu saches comment faire
    • Grub te permet de charger directement un noyau au format exe elf.
    • Pour charger un noyau, tu dois savoir où il se situe sur le support (disque dur, disquette), puis le charger en mémoire à l'adresse que tu veux, puis l'executer (avec un jump, en effet)


    Vaste sujet ...

  16. #36
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    À l'adresse que je veux :o

    Mais ce n'est pas illégal au cpu ? Je pourrais écraser des données importantes non ?

    Si grub permet de charger un elf cela veut dire qu'il a le loader elf d'inclus dans son code.

  17. #37
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par AsmCode
    À l'adresse que je veux :o

    Mais ce n'est pas illégal au cpu ? Je pourrais écraser des données importantes non ?
    ADRESSE | DESCRIPTION

    0000:0 Table des interruptions
    0040:0 Bios Data Area
    0050:0 LIBRE
    A000:0 Mémoire vidéo (VGA)
    B000:0 Mémoire vidéo
    B800:0 Mémoire vidéo
    C000:0 Espace réservé au BIOS

    Tu n'as le droit d'ecrire que dans la partie LIBRE, c a d entre 00500 et 99999.

    Si grub permet de charger un elf cela veut dire qu'il a le loader elf d'inclus dans son code. Very Happy
    à verifier, mais je crois bien que c'est ça ...

  18. #38
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Ok je vois

    Dit-moi est-ce que tu as msn ? j'aimerais bien t'ajouter à mes contacts, on pourrait discuter assembleur

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Mais ça ne répond pas à ma question

    Comment on "charge" le noyau en mémoire ? Dans le cas du bootloader c'est le bios qui le fait, mais pour le noyau on doit le charger soi-même, mais comment on fait pour transférer du disque dur à la mémoire un fichier quelconque ?

    À propos: noyau == kernel :

  20. #40
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    C'est le bootloader qui se charge de charger le noyau, ou de charger un loader intermédiaire chargé lui même de charger le noyau !
    on utilise en général l'int 0x13 du bios pour ca!

    noyau == kernel
    non pas tout à fait puisque "noyau" c'est un mot français alors que "kernel" c'est un mot anglais... Mais sur le principe c'est pareil !

    Si grub permet de charger un elf cela veut dire qu'il a le loader elf d'inclus dans son code.
    Vi vi c'est ca
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

Discussions similaires

  1. [MySQL] Est-ce que cette requête est exacte pour créer une nouvelle table?
    Par guillaume7684 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/02/2011, 14h17
  2. [Free Pascal] La nouvelle version stable est désormais la 2.4.0
    Par Alcatîz dans le forum Free Pascal
    Réponses: 1
    Dernier message: 01/04/2010, 13h01
  3. Le nouvel index Qt est en place
    Par koala01 dans le forum Qt
    Réponses: 9
    Dernier message: 07/06/2009, 01h59
  4. Un nouvel index C++ est en place !
    Par Alp dans le forum C++
    Réponses: 3
    Dernier message: 18/05/2009, 09h26
  5. Réponses: 17
    Dernier message: 31/08/2006, 14h50

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