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

Assembleur Discussion :

Adresse d'un octet en assembleur


Sujet :

Assembleur

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Adresse d'un octet en assembleur
    Bonjour à tous,

    Comment trouver l'offset d’un octet dans la mémoire RAM ?

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 622
    Points
    23 622
    Par défaut
    Bonjour,

    Ça n'a pas de sens : c'est ton micro-processeur demande à lire ou écrire à une adresse donnée par lui, en affichant les bonnes valeurs sur ses bus d'adresse et de donnée. Après, à cette adresse, il peut se trouver n'importe quoi : le plus souvent ce sera de la RAM, mais cela peut-être également de la ROM, des périphériques ou… rien, auquel cas la valeur lue sera indéfinie (généralement 0xFF) et la valeur écrite sera perdue.

    Le fait que de la RAM, de la ROM, un périphérique ou du vide se trouve à une adresse donnée est déterminée par la conception de la machine, dans laquelle on implante différents composants qui reçoivent tous, en même temps, les informations des bus d'adresse et de données mais qui sont faits pour ne réagir qu'à certaines combinaisons de ceux-ci.

  3. #3
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    Effectivement, la question posée n'a pas de sens telle qu'elle est posée.

    D'abord, l'emploi du terme " offset " est-il volontaire ?
    C'est un terme technique bien précis, en liaison avec l'adressage des microprocesseurs appartenant à la famille Intel x86.
    Pour ces microprocesseurs, une adresse en mémoire est obtenue à l'aide d'une adresse de segment et d'un décalage ( " offset " en anglais ).
    La question posée devient alors " Comment trouver le décalage d’un octet dans la mémoire RAM ? " et n'est toujours pas claire.

    Si la question signifie " Un octet étant donné, comment trouver son adresse dans une plage de mémoire ? ", alors elle a un sens.
    Il existe en effet une instruction en Assembleur x86 pour chercher un octet dans une zone de mémoire.
    C'est l'instruction SCASB précédée du préfixe REPNE.
    L'octet cherché doit être placé dans le registre AL, la zone de mémoire doit commencer à l'adresse ES:EDI ( en mode 32 bits ) et la taille en octets de la zone de recherche doit être placée dans le registre ECX.
    L'exécution de l'instruction REPNE SCASB permettra de trouver la première occurrence de l'octet cherché, si cet octet se trouve dans la zone de mémoire explorée.
    Si ECX est nul après l'exécution de l'instruction, ou si le flag ZF est à 0, c'est que l'octet n'a pas été trouvé.
    Sinon, il se trouve à l'adresse ES:EDI.

    Pour être complet, ajoutons que :

    - on peut choisir le sens de la recherche ( adresses croissantes ou décroissantes ), à l'aide du flag DF ;

    - en mode protégé, il n'y a pas besoin de se préoccuper du registre de segment ES car Windows utilise un modèle de mémoire ( dit " Flat " ) où les segments ont tous leur adresse de base à 0 et leur taille à 4 Go ;

    - en mode protégé, l'adresse obtenue est une adresse virtuelle ;
    si la pagination est activée, et c'est toujours le cas pour Windows en mode protégé, l'adresse virtuelle n'est pas l'adresse réelle dans la RAM ;
    convertir l'adresse virtuelle en adresse réelle est un problème délicat, qui demande de longues explications ;
    le lien http://sos.enix.org/wiki/upload/SOSD...texte-art4.pdf est une bonne introduction à ce dernier point.

    D'ailleurs, la question posée initialement pourrait s'interpréter en " Comment trouver l'adresse réelle d'un octet dans la mémoire RAM ? ".
    Dans ce cas, la discussion est loin d'être close.

    En résumé, il serait bon que la question soit reformulée avec plus de précision ...

Discussions similaires

  1. Adresse effective d'un octet ?
    Par DoDhLo dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 21/06/2010, 22h45
  2. Convertir adresse IP en 4 octet
    Par Torg666 dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2009, 14h30
  3. Calcul du nombre d'octets entre deux adresses
    Par IMPRO dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 21/12/2009, 19h18
  4. Gestion de la mémoire en Assembleur, octet ?
    Par Invité1 dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2008, 19h30
  5. adresse mac à 16 octets ?
    Par Tymk dans le forum Réseau
    Réponses: 1
    Dernier message: 03/07/2008, 08h35

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