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 :

Déclaration de variables globales et de constantes?


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 Déclaration de variables globales et de constantes?
    Bonjour à tous.

    Je travail l'assembleur afin de mieux comprendre la programmation de plus haut niveau (c et c++ par exemple).

    J'avance tout doucement et j'ai compris comment coder les variables locales et le passage de paramètres grâce à la pile!

    Maintenant, j'aimerais savoir comment déclarer des variables globales et des constantes?

    D'avance merci.

  2. #2
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    pour les constantes c'est facile, par exemple pour déclarer un constante "toto" de valeur 5 on écrit:
    et le compilateur va remplacer chaque mot "toto" par le nombre 5 au moment de la compilation

    les variables en assembleur sont des zone de mémoire, ont les déclare comme de simple sous programme en réservant la zone mémoire nécessaire par les instruction db(octet), dw(mot) et dd(double mot)

    par exemple pour une variable de type mot "toto2" et de valeur initiale 100 on écrit:

  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
    le compilateur va remplacer chaque mot "toto" par le nombre 5 au moment de la compilation
    Est-ce un peu comme le préprocesseur et le #define du c?
    Une constante est une valeur immédiate en quelque sorte, non ?
    Sera t'elle codée en "dure" dans le code segment?

    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
    Voilà, une constante est systématiquement remplacée par sa valeur dans le code compilé.

    pour reprendre l'exemple précédent,
    à chaque fois que tu vas faire un :

    le compilateur va coder :

  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
    Ok, merci pour vos réponses

  6. #6
    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.

    Je reouvre ce post afin de compléter ces informations.

    Voici ce que j'ai trouvé su le net à propos de la déclaration de constante:

    Makes variable value or pointer parameter unmodifiable.

    When const is used with a variable, it uses the following syntax:

    const variable-name [ = value];

    In this case, the const modifier allows you to assign an initial value to a variable that cannot later be changed by the program. For example,

    const my_age = 32;

    Any assignments to 'my_age' will result in a compiler error. However, such declaration is quite different than using

    #define my_age 32

    In the first case, the compiler allocates a memory for 'my_age' and stores the initial value 32 there, but it will not allow any later assignment to this variable. But, in the second case, all occurences of 'my_age' are simply replaced with 32 by the preprocessor, and no memory will be allocated for it.

    Donc, si je comprend bien, on pourrait déclarer, en assembleur, une variable avec db (dw, dd) et la considerer comme "constante" en ne la modifiant plus du tout?

    Cordialement.

  7. #7
    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
    Oui, tu peux considérer une valeur en mémoire comme constante du moment
    que tu n'écrives qu'une seul fois au début du programme ...comme dans
    n'importe quel langage en fait

    Par contre le codage des instructions n'est pas le même, c'est une valeur indirecte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    toto: dw 5
    ...
    mov ax,toto
    ...
    va être codé : mov ax,ds:[adresse_toto]

    ta valeur étant indirecte, tu ne peux pas l'utiliser dans certaines instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    toto equ 5
    ...
    shl ax,toto
    ...
    fonctionne

    mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    toto: db 5
    ...
    shl ax,toto
    ...
    C'est pas bon

  8. #8
    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 pour toutes ces précisions, cette fois ci je ferme le post et n'oublierais pas de coder mes constantes avec EQU plutôt que de traficoter avec les variables!

    Bonne journée à tous.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2013, 15h07
  2. Déclaration des variables globales en javascript non recommandée
    Par DarkPoster14 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/01/2013, 12h31
  3. déclaration de variable globale dans excel
    Par pierreTarek dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2012, 16h52
  4. déclaration de variable globale
    Par sandball22 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/02/2011, 18h07
  5. Déclaration de variables globales
    Par GuiDjad dans le forum Langage
    Réponses: 6
    Dernier message: 27/01/2010, 00h31

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