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 :

Conversion d'adresses mémoire vers octets


Sujet :

Programmation d'OS Assembleur

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Conversion d'adresses mémoire vers octets
    Bonjour,
    Tout d'abord, Merci à l'avance de pouvoir m'aider à pallier à ce problème.
    Voici mon problème :

    Je suis en ce moment en train de programmer un OS, j'ai déjà fait un secteur d'amorçage. Maintenant, je me suis dit que je vais tout écrire ce que je doit faire dans des fichiers ou sur papier afin de, au moment ou je commencerai à coder le noyau, ne pas avoir a réfléchir à ce que je dois faire. Je suis donc en train de réfléchir à l'organisation de la mémoire et j'ai un problème car, je veux faire correspondre une adresse mémoire du type 0xA15F (c'est un exemple) en un numéro d'octet. Je sais faire toute les conversions de données informatiques, mais quand j'ai cherché sur Internet la solution, j'ai trouvé que la concordance entre une Adresse Mémoire et un numéro d'octet, n'était pas du à la simple conversion Hexadécimal -> binaire ou octale.

    Je me pose donc la question suivante :
    Comment fait-on pour convertir une Adresse Mémoire du type 0xA15F en un numéro d'octet comme celui du premier Kilooctet de la RAM ?

    Merci encore à l'avance pour les réponses que vous pourriez me donner. J'espère vraiment avoir régler ce problème très rapidement.



    P.S. : Si ça ne vous dérange pas, je vous demande de me donner une réponse assez rapidement, car j'ai un tableau de concordance de 4 go d'Adresses à faire une fois le problème résolu.

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Hello,
    Je ne comprends pas vraiment ta question.
    mis à part en mode virtuel, une adresse correspond à un octet, et ces derniers sont les uns à la suite des autres.
    ce qui permet de faire des lectures d'octets, ou de valeurs 16, 32 et 64 bits.
    Pourrais-tu donner un exemple de ce que tu veux faire ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Convertion d'adresses Mémoires vers octets
    Bonjour,

    Ce que je veux faire, c'est un tableur contenant 2 lignes, une pour les adresses mémoires et l'autre pour les octets, et chaque colonne, c'est la correspondance entre une adresse mémoire de la première ligne et un octet de la deuxième ligne.

  4. #4
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Je pense qu'il y a quelque chose que tu as compris de travers
    Si tu dois faire un tableau qui te permet de connaître l'adresse de chaque valeur, alors ce tableau va être plus grand que la quantité de données

    Ton OS n'est pas obligé de se charger à partir de l'adresse 0, et ce n'est d'ailleurs pas possible (présence de données importantes)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Conversion d'adresse Mémoires vers octets
    Bonjour,

    Oui, je sais mon OS doit démarrer en 0x07C0, mais le tableau, c'est sur une feuille de papier ou un fichier Excel par exemple. Si je le fais, c'est juste pour m'y retrouver plus facilement dans ma gestion de la mémoire (elle est très compliquée, mais à l'avantage de rendre le système rapide). Si ma gestion de la mémoire était simple, je ne serait pas obliger de faire ce tableau. C'est purement pour ne pas avoir à me retrouver avec une erreur de RAM durant mes tests.

    J'espere que vous pourriez me donner une réponse rapide, si vous avez besoin encore d'informations, je peux vous envoyer un schéma des différentes parties de la mémoire sous mon OS.

  6. #6
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Attends, tu cherches une "cartographie" de la RAM c'est ça ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Conversion d'adresses mémoires vers octets
    Bonjour Forthman,

    Oui, c'est un peu ça, mais dites le moi si je me trompe mais dans la cartographie de la RAM faites par le BIOS qu'on peut récupérer avec une interruption, les adresses qu'on récupère sont toujours sous forme 0xF23A (c'est un exemple). Or si le BIOS les donne toujours sous cette forme, moi cela ne me convient pas.
    Je voudrais savoir le numéro de l'octet (par exemple le 1024(1 Ko)) qui correspond à une de ces adresses.
    Je pense, et c'est normal, que vous ne compreniez pas vraiment à quoi cela va pouvoir me servir, mais croyez moi, cette correspondance est pratiquement obligatoire pour implémenter ma propre gestion de la mémoire dans mon OS.

  8. #8
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Ok tu veux faire un OS mais tu ne connais pas l'hexadécimal ? ça me semble compliqué pour la suite...

    Parce que " les adresses qu'on récupère sont toujours sous forme 0xF23A (c'est un exemple). Or si le BIOS les donne toujours sous cette forme, moi cela ne me convient pas. " 0xF23A en décimal c'est 62010 (donc l'octet a l'adresse 62010 si c'est ta question) .
    Et tu devrais apprendre la lecture en hexadécimal vu que toute les memory map sont en hexadécimal (et par extension tout ce qui touche le bas niveau).

    mais dites le moi si je me trompe mais dans la cartographie de la RAM faites par le BIOS qu'on peut récupérer avec une interruption
    Je ne comprend pas ta phrase , le BIOS ne fait pas la cartographie de la RAM , la Memory Map est arbitraire et c'est le constructeur qui le décide.
    Sur PC , les tables interruptions se trouve on 0x00000000 - 0x000003FF , mais j'imagine que tu le sais.

    Pour ton OS , tu pourra juste écrire/lire librement dans la WRAM (la RAM de travail) , le reste étant réservé au Hard tu sera a l’obligation de ne pas y utiliser pour tes variables ou autre , vu quelle a une utilisation dédié.

  9. #9
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    non non, il a dit qu'il savait faire les conversion

    Mais ce qui me rassure, c'est que je ne suis pas le seul à ne pas comprendre ce qu'il veut faire...
    Et j'ai même l'impression que lui-même ne sait pas ce qu'il veut faire

    le BIOS ne fait pas de cartographie, il peut initialiser certains périphériques à certaines adresse, mais ça s'arrête là,

    J'ai l'impression que tu penses qu'il y a 3 étapes pour accéder à une valeur dans la RAM
    - Une adresse
    - une... je sais pas quoi qui modifie cette adresse en fonction d'une valeur sortie d'un chapeau
    - l'octet la donnée en elle-même

    sauf qu'il n'y a que 2 étapes
    - Une adresse
    - Un octet

    Vu que ce que tu veux faire a l'air top secret, sans rentrer dans les détails, pourrais-tu nous donner un exemple, même basique
    d'une opération que tu souhaites faire avec un valeur en RAM ?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Conversion d'adresses Mémoires vers octets
    Bonjour,

    Bon, si cela peut vous aider à me fournir de l'aide, je vais vous donner la première partie de ma gestion de la mémoire :

    - Le premier Mégaoctet de la RAM utilisable par mon OS: Variables de démarrage, protection des registres et tri des données envoyées a XKEY 1 (mon moteur d' OS).

    Et si je veux savoir a quel numéro d'octet correspond une adresse Mémoire, c'est pour savoir d'où à où va le premier Mo (pour ce qui concerne la partie de la gestion expliquée au dessus).


    J'espère que vous comprenez maintenant ce que j'aimerai faire et que vous me donnerez bientôt une réponse à mon problème, car sans ca, il m'est difficile de continuer.

  11. #11
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Effectivement je comprend moyen ce qu'il raconte ^^'

    Et si je veux savoir a quel numéro d'octet correspond une adresse Mémoire, c'est pour savoir d'où à où va le premier Mo (pour ce qui concerne la partie de la gestion expliquée au dessus).
    En soit je t'ai deja répondu , dans la Ram de travail , si tu veux une adresse précise par exemple a l'adresse :
    -0x00100000-0x00EFFFFF(14 MiB)
    -0x01000000+

  12. #12
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    un octet n'arrive pas par magie dans un registre, c'est que le processeur est allé le chercher, du il sait d'où il vient.

    Il y a bien le cas des interruptions, mais là encore, même si plusieurs équipements peuvent partager la même interruption,
    c'est au programmeur de faire des tests pour savoir quel périphérique l'a activé.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Conversion d'adresse Memoires vers octets
    Bonjour,

    Donc, je vois que je m'explique très mal et que vous n'arrivez pas à pouvoir me répondre. Je vais, du coup mettre en résolu, même si je n'ai pas résolu mon problème. Je vais devoir me débrouiller autrement.


    Si par hasard, vous arrivez finalement à comprendre, et que vous voulez m'aider, vous pouvez le faire en m'écrivant à cette adresse :

    rprogramm.pc1@outlook.com

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Conversion d'adresse Memoires vers octets
    Bonjour,

    Je sais que cette discussion est censée être en résolu, mais, j'ai trouvée la solution à mon problème et je me suis dit qu'il y aurait peut-être des gens qui en aurait besoin un jour. Voici la solution.


    Techniquement, une adresse du type 0x8A54 ne peut pas se convertir en octets par la simple utilisation d'une conversion entre hexadécimal et octets sous forme décimal. Mais, nous pouvons écrire 0x8A54 comme ca : 8A54 (en mode protégé). Et bien sûr, suivant la gestion de la mémoire que nous avons décidé de faire, l'écart et la précision entre 0x8A54 et 8A54 est nulle. Et il se trouve que la gestion de la mémoire d' XKEY 1 (le moteur d'OS d'OPEN) me le permet.


    Source de la solution : Mes tests sur mon OS et mon moteur d'OS.

  15. #15
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    J'ai beau relire plusieurs fois j'ai rien compris ^^'

    Techniquement, une adresse du type 0x8A54 ne peut pas se convertir en octets
    hein pourquoi ? 0x8A54 est une adresse sur 16 bits (soit 2 octets)

    par la simple utilisation d'une conversion entre hexadécimal et octets sous forme décimal.
    pas compris , quel rapport entre l'assembleur et l'écriture hexa,décimal,binaire ? sachant que si j'écris 10,0Ah ou %1010b c'est la même chose.

    Mais, nous pouvons écrire 0x8A54 comme ca : 8A54 (en mode protégé). Et bien sûr, suivant la gestion de la mémoire que nous avons décidé de faire
    Tu parle de comment écrire de l'hexa sur un programme assembleur ?
    parce que quand du dit ça "l'écart et la précision entre 0x8A54 et 8A54 est nulle." euh ça me semble évident vu que cela dépend du programme assembleur , la syntaxe pour représenté l'hexadécimal est arbitraire.

  16. #16
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    T’inquiète pas Kannagi, tu n'es pas le seul

    la différence entre 0x8A54 8A54h ou 8A54 est juste un choix syntaxique du compilateur utilisé, ça ne change en rien la valeur elle-même,
    et ça n'a rien à voir avec la gestion de la RAM.

    Peut-être que la question que tu te poses est :
    Comment un programme exécuté dans un OS arrive à trouver ses données alors que son adresse de chargement en RAM n'est pas fixe ?
    (vas-y ! dis moi que c'est ça s'il te plait ! )

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/12/2012, 19h32
  2. Réponses: 0
    Dernier message: 17/10/2011, 22h00
  3. conversion valeur hexadecimal / adresse mémoire
    Par saturne13 dans le forum C
    Réponses: 10
    Dernier message: 04/02/2007, 20h15
  4. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 22h08
  5. conversion : VARIANT FAR* URL vers CString
    Par kam dans le forum MFC
    Réponses: 2
    Dernier message: 29/03/2004, 13h32

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