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 :

[Emu8086] Permuter deux cases mémoire


Sujet :

x86 16-bits Assembleur

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2017
    Messages : 7
    Points : 8
    Points
    8
    Par défaut [Emu8086] Permuter deux cases mémoire
    Bonsoir tt le monde,

    Je suis étudiant en faculté et j'ai un exercice ou je dois déclarer dans le segment de donnée deux case mémoires en mots A et B et puis permuter les contenus de A et B

    Alors le code que j'ai écris est le suivant et apparemment il marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    ; You may customize this and other start-up templates; 
    ; The location of this template is c:\emu8086\inc\0_com_template.txt
     
    org 100h 
     
    mov AX, A
    mov BX, B
     
    mov A, BX
    mov B, AX
     
     
    ; add your code here 
     
    ret
     
    A dw 2
    B dw 3
    Les registre AX et BX prennent respectivement les valeur de A et B et la permutation se fait.

    Alors j'ai 2 question :

    1) Ce que je ne comprend pas c'est puisque l’exécution ce fait instruction par instruction , comment dés le début le compilateur sais la valeur de A et B et arrive a la mettre dans AX et BX (comme montrer dans la photo)?

    Nom : 1.PNG
Affichages : 235
Taille : 46,0 Ko

    2) pourquoi je vois la permutation de A et B dans la ligne A dw 2 et B dw 3 ?

    Nom : 2.PNG
Affichages : 232
Taille : 48,9 Ko

    Nom : 3.PNG
Affichages : 225
Taille : 46,7 Ko

    Merci d'avance pour vos reponses

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    12 039
    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 : 12 039
    Points : 27 010
    Points
    27 010
    Par défaut
    Tu ne fais pas de permutation, tu écrases les valeurs précédentes de AX et BX. Tu vois une "permutation" car tu remplace toi-même les valeurs par les valeurs permutées.

    Si tu ne connais pas les valeurs A et B ça marche pas.

    Il existe une fonction permettant de permuter les valeurs de 2 registres.
    Tu peux aussi faire un code effectuant la permutation en passant par un autre registre ou la pile.

    Je te laisse chercher, c'est comme ça qu'on apprend.
    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
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CouscouS1337 Voir le message
    Bonsoir tt le monde,
    ...
    1) Ce que je ne comprend pas c'est puisque l’exécution ce fait instruction par instruction , comment dés le début le compilateur sais la valeur de A et B et arrive a la mettre dans AX et BX (comme montrer dans la photo)?
    Attention, je crois que tu confonds les adresses et leur contenu !
    Voici donc comment il faut interpréter le listing de désassemblage dont tu as fourni certaines captures d'écran :

    • MOV AX, [0010Eh] => tu mets dans le registre AX le mot (16 bits) présent à l'adresse 0010Eh (variable A)
    • MOV BX, [00110h] => tu mets dans le registre BX le mot (16 bits) présent à l'adresse 00110h (variable B)
    • MOV [0010Eh], BX => tu mets le contenu du registre BX (contenant maintenant la variable B) à l'adresse 0010Eh
    • MOV [00110h], AX => tu mets le contenu du registre AX (contenant maintenant la variable A) à l'adresse 00110h



    C'est le compilateur qui s'est chargé de déterminer les adresses 0010Eh et 00110h. Mais ce sont seulement des adresses !

    2) pourquoi je vois la permutation de A et B dans la ligne A dw 2 et B dw 3 ?
    Lorsque tu déclares A dw 2 et B dw 3, tu déclares 2 variables : A = 2 et B = 3.
    Le compilateur te met, parce qu'il trouve ces emplacement libres, successivement la valeur 0002h à l'adresse 0010Eh puis la valeur 0003h à l'adresse 00110h. Les noms de variables A et B sont des concepts internes au compilateur, en d'autres termes, des facilités données aux utilisateurs, ce qui fait que ces noms n'apparaissent nullement dans le programme compilé. Cela évite la manipulation d'adresses souvent compliquées.
    Tu as fait une permutation au sens strict du terme mais en mobilisant 2 registres dont tu pourrais avoir un besoin urgent pour conduire d'autres actions. Et là, je te renvoie à la suggestion de chrtophe...
    Dernière modification par Winjerome ; 16/04/2019 à 23h36. Motif: Ajout des balises [C] ... [/C]

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    12 039
    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 : 12 039
    Points : 27 010
    Points
    27 010
    Par défaut
    Que les registres contiennent une adresse ou une valeur, la permutation de leur contenu se fait de la même façon.
    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

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Que les registres contiennent une adresse ou une valeur, la permutation de leur contenu se fait de la même façon.
    Monsieur de La Palice n’eût sans doute pas mieux dit... Ai-je prétendu le contraire ?

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    12 039
    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 : 12 039
    Points : 27 010
    Points
    27 010
    Par défaut
    Monsieur de La Palice n’eût sans doute pas mieux dit... Ai-je prétendu le contraire ?
    Non, j'ai juste précisé par clarté pour le demandeur.
    Ton code est juste. L'auteur a juste à remplacer les adresses que tu as donné par A et B.
    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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2017
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    D'accord merci beaucoup pour vos réponses , et je vais essayer de chercher une autre façon !

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

Discussions similaires

  1. Permuter deux variables sans variable temporaire
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 09/01/2015, 09h02
  2. Permuter deux ligne avec un DataGridview
    Par glycerine dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/12/2007, 22h18
  3. Table, faire la fusion entre deux case
    Par dftrish dans le forum WinDev
    Réponses: 4
    Dernier message: 05/06/2007, 17h22
  4. allocation cases mémoires consécutives
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 06/10/2006, 14h33
  5. Réponses: 21
    Dernier message: 21/07/2006, 17h55

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