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

x86 16-bits Assembleur Discussion :

db, dw, dl nécessaires?


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 220
    Points : 100
    Points
    100
    Par défaut db, dw, dl nécessaires?
    Bonjour à tous.

    db, dw, dl sont ils nécessaires pour déclarer des variables (globales/statiques)?

    Peut-on juste réserver/calculer leur emplacement mémoire dans le data segment, un peu comme pour les arguments/variable locales dans la pile?

    D'avance merci.

  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
    à confirmer suivant l'assembleur utilisé, mais tu peux très bien déclarer
    un emplacement sans allouer de mémoire. ça s'appelle un label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var1:
    var2 dw 2013
    var1 et var2 pointent la même adresse... mais pour quoi faire ?

    Dans le même style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var1 db 0
    var2 db 0
    ...
    ...
    mov word [var1],2013
    va aussi modifier var2 car var1 est sur 1 octet et 2013 sur un word
    tu te retrouves avec un var1=221 et var2=7 (7x256+221=2013)

    Je n'utilise plus depuis longtemps d'assembleur "standard" et je pense que
    la plupart refuseront de placer une valeur 16 bits dans une variable 8bits...

    François

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 220
    Points : 100
    Points
    100
    Par défaut
    Bonjour à tous.

    Merci Forthman, mais je ne suis pas sûr d'avoir compris tes exemples car je ne faisais pas référence à l'utilisation de label et encore moins à du "define byte" etc.

    Voilà ce à quoi je faisais référence (on va faire un programme qui additionne les deux valeur, var1 et var2 et met le résultat dans var3):

    exemple de code avec db,dw etc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    debut: 
     
    mov ax, word ptr [var1]
     
    add ax, word ptr [var2]
     
    mov word ptr [var3], ax
     
     
    dw var1 4
    dw var2 5
    dw var3 ?
    Et maintenant le même code sans "define...":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    debut:
    mov word ptr [DS], 4       ; on reserve/initalise l'emplacement dans le 
    mov word ptr [DS + 2], 5 ; segment de donnée
     
    mov ax, word ptr [ds]
     
    add ax, word ptr [DS + 2]
     
    mov word ptr [DS + 4], ax
    Cela serait il correcte?

    D'avance merci.

  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
    DS ne peut pas être utilisé comme ça, ce n'est pas un pointeur d'adresse.

    ton code devrait plutôt ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    debut:
    mov word ptr ds:[0], 4       ; on reserve/initalise l'emplacement dans le 
    mov word ptr ds:[2], 5 ; segment de donnée
     
    mov ax, ds:[0] ; pas besoin de préciser que c'est un word car c'est explicite avec ax
     
    add ax, ds:[2]
     
    mov ds:[4], ax
    de même, il n'est pas utile de spécifier ds: à chaque fois car c'est le segment par défaut (ça marche mais ça fait doublon et augmente le code pour rien)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 220
    Points : 100
    Points
    100
    Par défaut
    Merci Forthman.

    Je suis d'accord sur le fait que cela augmente le code, mais c'est uniquement pour avoir une compréhension total sur la "mécanique" de l'assembleur;


    Cordialement.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/03/2005, 10h31
  2. [structure] Initialisation nécessaire ?
    Par gangsoleil dans le forum Réseau
    Réponses: 6
    Dernier message: 07/03/2005, 19h27
  3. [Débutant][CVS] Ressources nécessaires
    Par M.Le_maudit dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/01/2004, 09h40
  4. [CR] Version nécessaire pour créer des fichiers DSR ?
    Par aysse dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/11/2003, 09h01
  5. [CR] erreur "groupe nécessaire ..."
    Par vb6dv dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 15/10/2003, 11h12

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