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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 135
    Points : 154
    Points
    154

    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
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    9 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 9 633
    Points : 21 577
    Points
    21 577

    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 la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 135
    Points : 154
    Points
    154

    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
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 400
    Points : 7 191
    Points
    7 191

    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
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    9 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 9 633
    Points : 21 577
    Points
    21 577

    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 la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    9 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 9 633
    Points : 21 577
    Points
    21 577

    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 la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    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, 12h44
  2. [Windows]accès base de registre windows
    Par Greg01 dans le forum APIs
    Réponses: 27
    Dernier message: 05/06/2007, 16h14
  3. Utilisez vous la base de registres ?
    Par gRRosminet dans le forum C++Builder
    Réponses: 8
    Dernier message: 04/06/2002, 14h55
  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, 18h29

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