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 :

Registre DX et adresses


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Points : 156
    Points
    156
    Par défaut Registre DX et adresses
    Salut

    J'ai lu dans un article un code "hello word" avec les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    mov  DX, hello ; 
    .....
    ....
     
    hello        db 13,10,'Hello World.',13,10,'$' ;
    Ici , il a mis l'adresse de hello dans DX.
    Ce que je ne comprends pas, c'est comment on peut utiliser le registre DX avec les adresses ?

    Merci

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 431
    Points : 43 057
    Points
    43 057
    Par défaut
    La question ne veut rien dire.

    Que veux tu faire ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Points : 156
    Points
    156
    Par défaut
    Je veux afficher le contenu de la variable hello
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    mov  DX, hello 
    mov  AH, 0x9  
    int  0x21    
    ret
    hello        db 'Hello World.'
    le code fonctionne mais comment on a pu mettre l'adresse de hello dans Dx
    normalement on devait utiliser un autre registre pour les adresse comme par exemple le registre SI

  4. #4
    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
    Citation Envoyé par je viens du sud Voir le message
    le code fonctionne mais comment on a pu mettre l'adresse de hello dans Dx
    Pas forcément, je te rappelle que ici hello est un label donc une valeur.
    En gros, tu peux très bien écrire mov dx,5423, ton programme assembleur va traduire ton hello par la valeur correspondant a l'adresse de hello dans ton binaire (sauf si t'as le courage de compter les nombre d'opcodes. ).

    normalement on devait utiliser un autre registre pour les adresse comme par exemple le registre SI
    Les registres d'adresse sont spécifiques si tu veux jouer avec des pointeurs, en soi tu peux mettre une adresse dans n'importe quel registre.

    La distinction du type de registre vient surtout de ce que on peut en faire (un accumulateur pourra faire des calculs avancés) alors que les registres d'adresse sont plus limités mais possèdent des instructions spécifiques pour la manipulation de pointeurs, bref le mettre dans DX n'est pas un probleme dans ton cas !
    De nos jours il me semble que les registres sont assez généraux (peuvent servir de registre d'adresse, comme d'index ou d'accumulateur).

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 431
    Points : 43 057
    Points
    43 057
    Par défaut
    Il faut comprendre que tu vas utiliser une fonction du système d'exploitation qui dans le cas de MS-DOS attend pour fonctionner des valeurs précises dans des registres précis. Peut importe l'usage standard des registres.

    Et dans certains CPU, autres que x86, les registres ne sont pas "typés" et dédié à tel ou tel usage (mis à part les registres de contrôle).

    Et dans d'autres OS, le passage de paramètres aux fonctions systèmes se fait différemment. Exemple :

    Sous Windows : empilement des paramètres dans l'ordre attendu
    Sous Linux : numéro de fonction système dans eax (l'équivalent du contenu de ah pour MS-DOS), puis les paramètres dans ebx, ecx, edx, esi, edi
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 431
    Points : 43 057
    Points
    43 057
    Par défaut
    De nos jours il me semble que les registres sont assez généraux (peuvent servir de registre d'adresse , comme d'index ou d'accumulateur).
    Sur x86, c'est un plus compliqué que ça. Certains mnémoniques sont liés à des registres précis lodsb stosb et utilisent les registres d'index si et di. Par contre la fonction mov est plus souple et peut utiliser tous les registres (hors registres de segment bien sûr) exemple mov ax,[bx]. La fonction loop va décrémenter cx (le registre compteur), mais il est tout à fait possible de faire une boucle avec les fonctions de sauts (c'est même recommandé loop nécessitant beaucoup de cycles de mémoire). Je ne sais pas si utiliser n'importe quel registre joue sur le temps de traitement. Les multiplications et divisions utilisent ax et dx, exemple mul cx signifie multiplication de ax par cx, et le résultat sera stocké dans ax:dx.

    Mais sur le fond, je pense que tu as raison, le cas du x86 est un cas particulier, c'est un CPU qui a 40 ans. Les dernières générations restent compatibles avec les modèles d'il y a 40 ans.

    Et l'autre grande gamme utilisée actuellement, les processeurs ARM par exemple, il y a 11 registres généraux r0 à r10 et des registres de contrôle (exemple pour ARMv6, sur les gammes suivantes il y a probablement plus de registres généraux). Pour les calculs on indique les registres sources et destination dans l'instruction, n’importe quel des registres généraux.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. Copier la valeur d'un registre à l'adresse d'une variable
    Par fs1985 dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 01/10/2016, 11h44
  2. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 15h14
  3. Utilisez vous la base de registres ?
    Par gRRosminet dans le forum C++Builder
    Réponses: 8
    Dernier message: 04/06/2002, 13h55
  4. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29

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