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 :

Comprendre l'instruction LES


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut Comprendre l'instruction LES
    Salutation à vous.

    Pas compris une ligne de code sur le langage assembleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xor ax, ax
    mov es, ax
    les bx, [es:0x33*4]
    Je ne comprends pas ce que fait la dernière ligne de code, dans le tutoriel il n'a mis aucune explication (comme souvent)
    La documentation semble donner des explications contradictoires.

    Merci d'avance pour vos réponses

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    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 437
    Points : 43 078
    Points
    43 078
    Par défaut
    LES = Load ES with far pointer. en gros ça charge une adresse dans ES:BX
    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 du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    LES = Load ES with far pointer. en gros ça charge une adresse dans ES:BX
    Puis-je avoir un exemple pour mieux comprendre ?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    LES = Load ES with far pointer. en gros ça charge une adresse dans ES:BX
    Je viens de vérifier et il me semble que c'est factuellement faux ou alors je n'ai pas compris quelque chose.

    En gros si j'ai bien compris ici l'adresse serait "0x33*4" ?

    Si on multiplie ce 33 hexa par 4 j'obtiens ceci "1100 1100 = 204 = cc"

    Sur 32 bits : 0000 0000 0000 0000 0000 0000 1100 1100

    Alors j'ai vérifié dans les registres es et bx s'il contenait chacun l'adresse complète et la réponse est non, les registres es et bx sont mêmes différents apparemment.

    J'ai ensuite vérifié si l'adresse n'était pas coupé en deux et mettait la première moitié dans es ou dans bx, puis la deuxième dans le registre restant, et ce n'est pas le cas puisque j'ai vérifié si bx était égal à 204 ou à 0, puis j'ai fait de même avec es

    Mais tout ceci n'a pas fonctionné

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    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 437
    Points : 43 078
    Points
    43 078
    Par défaut
    il me semble que c'est factuellement faux
    https://www.intel.com/content/www/us...intel-sdm.html

    page 577 volume 2 partie 3
    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
    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
    Alors la doc est bien sur le meilleur , mais pour regarder rapidement une instruction je conseille :
    https://www.felixcloutier.com/x86/lds:les:lfs:lgs:lss

    Mais sinon oui LES semble faire ce que dit chrtophe : "Cette instruction permet de copier une adresse de mémoire contenu sur 32 bits dans la paire de registre de segment ES et dans un registre de déplacement spécifié."

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Ici je te réponds à toi et à Kannagi

    Dites vous que de lire une phrase de la documentation et réciter cette phrase ne veut pas dire que vous avez compris le concept en question ou l'instruction. Non cela veut juste dire que vous avez appris à réciter une phrase par coeur ou la copié collé sans forcément la comprendre.

    Moi aussi je peux facilement fouiller les documentations, voir des phrases qui vont se contredire pour cette instruction précise et ne pas voir la réalité de la phrase dans la pratique, je pourrais me contenter d'apprendre la phrase par coeur, la réciter et me dire "c'est bon j'ai compris" mais ce n'est pas comme ça que fonctionne l'apprentissage en réalité

    Vous ne pouvez pas donner d'exemple, expliquer par vous même car vous n'avez pas compris, vous vous contentez de copier coller une phrase d'une des différentes documentation sans la comprendre, mais j'avais déjà fait le travail de regarder dans les documentations

    La difficulté pour moi est vraiment l'impossibilité de voir ce qu'il y a dans les registres, la documentation dit aussi ceci "L'exemple suivant permet de copier le contenu de la mémoire au déplacement 4326h dans le registre ES vers le registre BL, le contenu de 4327h vers le registre BH. Le contenu à un déplacement de 4328h et 4329h est copié dans le registre ES :"

    J'ai alors fait mes testes à l'aveuglette et parfois ça fonctionne et parfois ça ne fonctionne pas, impossibilité de savoir pourquoi car je ne vois rien, je précise que les debuggueur comme sasm et gdb en ligne sont assez merdiques puisqu'ils vont avoir tendance à ne pas accepter des instructions ou des registres

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    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 437
    Points : 43 078
    Points
    43 078
    Par défaut
    Vous ne pouvez pas donner d'exemple, expliquer par vous même car vous n'avez pas compris
    C'est surtout que j'ai pas le temps, et pas trop envie quand on me répond que ce que je dis est "factuellement faux".

    Le meilleur moyen de tester, c'est de le faire avec un débugeur.

    Mais :

    Je sais pas me servir de gdb, alors il est merdique, avec cette approche, tu vas vachement y arriver.

    De toute façon, tu ne pourras pas tester le code fourni avec gdb, car tu ne pourras pas mettre 0 dans le registre ES en étant en mode protégé.

    Ton code va charger le vecteur de l'interruption 0x33 du mode réel. Je me souviens plus à quoi elle sert par contre.

    Tu pourrais tester avec Bochs en lançant un OS en mode réel comme MS-DOS dedans. Il a un débugueur te permettant de facilement faire de l’exécution pas à pas et voir la valeur des registres
    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

  9. #9
    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 Akainu_2018 Voir le message
    Dites vous que de lire une phrase de la documentation et réciter cette phrase ne veut pas dire que vous avez compris le concept en question ou l'instruction. Non cela veut juste dire que vous avez appris à réciter une phrase par coeur ou la copié collé sans forcément la comprendre.

    Moi aussi je peux facilement fouiller les documentations, voir des phrases qui vont se contredire pour cette instruction précise et ne pas voir la réalité de la phrase dans la pratique, je pourrais me contenter d'apprendre la phrase par coeur, la réciter et me dire "c'est bon j'ai compris" mais ce n'est pas comme ça que fonctionne l'apprentissage en réalité

    Vous ne pouvez pas donner d'exemple, expliquer par vous même car vous n'avez pas compris, vous vous contentez de copier coller une phrase d'une des différentes documentation sans la comprendre, mais j'avais déjà fait le travail de regarder dans les documentations
    Alors je code en assembleur depuis plus de 10 ans.
    Et j'ai du faire une dizaine d'assembleur, tu m'excusera j’espère que je me souviens pas de tout et que j'ai pas testé toute les instructions de tout les assembleur du monde

    Si ça marche pas , c'est moi qui peut dire que j'ai l'impression que tu bidouille beaucoup ,je suis pas sur que tu as même bien compris le mode de l'adressage du 8086 avec son segment::adresse


    Citation Envoyé par Akainu_2018 Voir le message
    mais ce n'est pas comme ça que fonctionne l'apprentissage en réalité
    Ben justement si , dans la vrai vie en tant que programmeur bas niveau ,quand je connais pas une instruction ,je lis la doc , et étrangement ça fait exactement ce qui est écrit...


    Par contre tu teste ça où ?
    Parce que de ce que je comprend si tu teste ça sur ton CPU en mode protéger et en 32 bits , pas sur que LES fonctionne exactement comme tu le veux.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    J'en profite pour dire que finalement j'ai réussi à trouver.

    Kannagi :

    Ben justement si , dans la vrai vie en tant que programmeur bas niveau ,quand je connais pas une instruction ,je lis la doc , et étrangement ça fait exactement ce qui est écrit...
    Tu es entrain de me faire un homme de paille, c'est à dire que tu réponds à quelque chose que je n'ai pas dit. Tu cites une de mes phrases en coupant le reste ce qui fait que c'est hors contexte et qu'on ne comprend pas de quoi je parle quand je dis que ce n'est pas comme ça que fonctionne l'apprentissage

    Voilà ce que j'ai vraiment dit : "Moi aussi je peux facilement fouiller les documentations, voir des phrases qui vont se contredire pour cette instruction précise et ne pas voir la réalité de la phrase dans la pratique, je pourrais me contenter d'apprendre la phrase par coeur, la réciter et me dire "c'est bon j'ai compris" mais ce n'est pas comme ça que fonctionne l'apprentissage en réalité"

    évidemment qu'il faut lire la documentation lorsque tu n'as pas compris quelque chose mais parfois la documentation peut être assez complexe et alors tu vas sur un forum pour demander plus de précision et si la personne au lieu de t'expliquer avec pédagogie se contente de faire un copié collé de la documentation alors que justement tu n'avais pas compris celle ci à la base c'est qu'il y a un problème

    Sinon je teste sur dosbox ou sasm

  11. #11
    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
    Je crois que tu n'as pas compris mon post initiale , il n'était pas pour expliquer l'instruction ,mais surtout mettre une documentation.
    Pour celà que j'ai cité ensuite la doc.
    Juste que je trouve la documentation Intel "difficile à lire" avec ces 5000 pages, mais c'est comme tu le sens

    C'est ce que j'ai dit en premier :
    Alors la doc est bien sur le meilleur , mais pour regarder rapidement une instruction je conseille :

    Bref je pense que le soucis c'est que tu as juste très mal pris nos post , si les réponses qu'on te donne te dérange, je vois pas pourquoi tu viens demander de l'aide

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    Je crois que tu n'as pas compris mon post initiale , il n'était pas pour expliquer l'instruction ,mais surtout mettre une documentation.
    Pour celà que j'ai cité ensuite la doc.
    Juste que je trouve la documentation Intel "difficile à lire" avec ces 5000 pages, mais c'est comme tu le sens

    C'est ce que j'ai dit en premier :



    Bref je pense que le soucis c'est que tu as juste très mal pris nos post , si les réponses qu'on te donne te dérange, je vois pas pourquoi tu viens demander de l'aide
    Je n'ai pas mal pris vos postes et j'avais bien compris ton premier post.

    C'était juste une critique en général, la personne peut mieux comprendre avec des exemples concrets, c'est à dire expliquer une chose en remplissant les registres à but pédagogique et ensuite effectué l'instruction et dire "là ça fait ça, ici ça met cette valeur dans ax, là ça va mettre ça dans bx" et ainsi de suite.

    Je trouve que beaucoup de documentation vont manquer de ce genre de chose, c'était une critique qui revenait souvent sur les forum

    Comme ici par exemple https://fr.acervolima.com/operateurs...20d%C3%A9cimal.

    Il explique ce qu'est un et logique, il fait une phrase théorique et un exemple concret qu'on peut décortiquer pour comprendre

  13. #13
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    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 437
    Points : 43 078
    Points
    43 078
    Par défaut
    la personne peut mieux comprendre avec des exemples concrets, c'est à dire expliquer une chose en remplissant les registres à but pédagogique et ensuite effectué l'instruction et dire "là ça fait ça,
    Sauf qu'ici c'est un forum, c'est plutôt pour répondre à des questions sans forcément faire un pavé d'explications. Ce que tu demandes, il faut plutôt le chercher dans la section tutoriels, quitte à venir ensuite poser des questions sur des points précis.
    Par exemple :
    https://benoit-m.developpez.com/asse...riel/index.php

    Pas sûr que tu trouves quelque chose sur l'instruction LES précisément (il ne va pas expliquer tous les opcodes, pour ça il y a la doc), mais il va t'expliquer le principe de la segmentation mémoire en mode réel.

    Par contre comme je le disais, il s'agit de source assembleur en mode réel obsolète et qui ne peut pas être exécuté tel quel sur un OS en mode protégé, sauf avec des outils simulant le mode réel par exemple ou via émulateur comme Bochs qui intègre un débogueur. Depuis dosbox, que tu sembles utiliser, tu devrais pouvoir exécuter le code avec debug et voir comment les registres sont modifiés par les instructions.

    Le tutoriel vers lequel je te renvoi n'est par contre pas utilisable pour faire de l'assembleur 32/64 bits en mode protégé, mais pour ton cas de figure il devrait convenir.
    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. Comprendre l'instruction do while
    Par romi36 dans le forum VBScript
    Réponses: 4
    Dernier message: 19/07/2007, 07h12
  2. Comprendre MVC avec les JSF
    Par nighma dans le forum JSF
    Réponses: 2
    Dernier message: 18/04/2007, 16h45
  3. Réponses: 13
    Dernier message: 03/08/2006, 16h31
  4. Instruction "les ax, sp" sous NT
    Par Eric Sigoillot dans le forum Assembleur
    Réponses: 3
    Dernier message: 12/08/2004, 19h14

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