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 :

Adresse absolue en hexa de la prochaine instruction à exécuter


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 46
    Points : 37
    Points
    37
    Par défaut Adresse absolue en hexa de la prochaine instruction à exécuter
    Bonsoir,

    Je ne sais pas par quel bout prendre pour traiter la problématique suivante :
    Quelle adresse absolue (en hexadécimal) de la prochaine instruction à exécuter, sachant que :
    CS = 12AD
    DS = 1B52
    ES = 0098
    DI = 1B68

    SP = 00A2
    IP = 009C
    SS = 2585

    >Voici ce que j'ai pu regrouper comme info

    Registre
    Segment
    Registre
    Pointeur
    Spécification
    CS IP Compteur ordinal
    SS SP Sommet de pile
    SS BP Accès à la pile
    DS SI Source pour LODSB/W
    ES DI Destination pour STOSB/W

    CS Code Segment
    DS Data Segment
    SS Stock Segment

    DS
    SS

  2. #2
    Invité
    Invité(e)
    Par défaut Adresse absolue
    Tu peux trouver rapidement la réponse en posant ta question EN ANGLAIS sur Google. Tu tombes en général sur StackOverflow. Petit rappel : la mémoire segmentée, c’est la préhistoire des processeurs Intel.
    Cela dit, l’astuce consiste à fabriquer une adresse 20 bits (dénommée adresse absolue) par la combinaison un peu particulière de 2 registres 16 bits :
    Adresse absolue = (CS*16)+IP
    Il s’agit ici des instructions. On procède de même pour les données et la pile mais en remplaçant les registres de segment par DS (ou ES) et SS, respectivement.
    Le fait de multiplier par 16 équivaut à un décalage de 4 bits à gauche et consiste tout simplement à rajouter un zéro à droite du nombre sous réserve qu’il soit en notation hexadécimale.
    Dans ton exemple, CS = 12AD et IP = 009C et donc :
    Adresse absolue = 12AD0 + 009C = 12B6C

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Bonsoir et merci Asmou,
    Voilà une réponse claire. Je t'en remercie.
    Je rencontre de nouveau des Pb sur un sujet qui me paraît semblable...
    Mais je ne trouve rien comme exercice similaire...
    Du coup difficile d'avancer

    Le contenu des registres (présenté en hexadécimal) est actuellement :
    CS = 03E4 A = 02 IP = 0042
    DS = 03EA B = F6 SP = 0006
    SS = 0400 RX = 6780 BP = 0011
    RY = 00D4

    03E40 17 1B 04 00 1D 10 14 02 01 00 14 17 18 0B 1B 0C
    03EA0 00 00 29 12 09 00 12 15 00 01 03 02 34 00 11 11
    04000 02 C1 05 14 17 18 63 00 16 12 15 1B BA 0B 11 11

    1) Désassemblez la séquence des 12 octets qui vont maintenant être exécutés.
    2) Quel est le contenu des registres à la fin de l’exécution de cette séquence ?
    3) Quel a été le calcul effectué et quelle modification (en décimal) a été apportée au contenu de la mémoire ?


    Si je regarde ce que j'ai trouvé et ce que tu m'as indiqué.
    Je me dis que pour la question 3, ça devrait être quelque chose comme :
    Le fait de multiplier par 16 équivaut à un décalage de 4 bits à gauche et consiste tout simplement à rajouter un zéro à droite du nombre sous réserve qu’il soit en notation hexadécimale.

    Pour la 1 et la 2 :
    "On procède de même pour les données et la pile mais en remplaçant les registres de segment par DS (ou ES) et SS"

  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
    Comme tricher c'est mal, je comptes sur toi pour te servir de ce lien uniquement pour contrôler ton résultat
    https://onlinedisassembler.com/odawe...ffset/000001a2

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je ne comprends rien à cet exercice. L’adresse absolue de 03E4:0042 (CS:IP) est normalement 03E82. C'est là que doit démarrer le programme, si j'ai bien compris.Or, on ne rencontre aucunement cette adresse dans la suite de 3 lignes de 16 octets. Dans les 2 premières lignes, on passe allègrement de 03E40 à 03EA0 puis à 04000 alors que chaque ligne ne contient que 16 octets ! Je rappelle ces 3 lignes :

    03E40 17 1B 04 00 1D 10 14 02 01 00 14 17 18 0B 1B 0C
    03EA0 00 00 29 12 09 00 12 15 00 01 03 02 34 00 11 11
    04000 02 C1 05 14 17 18 63 00 16 12 15 1B BA 0B 11 11

    Et le contenu initial des registres (en hexadécimal) :
    CS = 03E4 A = 02 IP = 0042
    DS = 03EA B = F6 SP = 0006
    SS = 0400 RX = 6780 BP = 0011
    RY = 00D4

    Par ailleurs, je ne comprends pas vraiment ce que sont les paramètres A, B, RX et RY. S'agit-il de variables ? de registres (pas en x86, en tout cas) ?
    Du reste, si on utilise le désassembleur ODA proposé par Forthman, les résultats sont incohérents...
    Dernière modification par Invité ; 01/11/2018 à 12h23.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Bonjour Asmou,

    je n'ai sans doute pas été complet.
    Voici

    03E00 11 01 04 1B BA 0B 1A 01 15 11 01 1E 1B B8 0B 1A
    03E10 01 15 14 02 41 05 14 17 18 06 0F 12 11 16 01 01
    03E20 0A 16 0A 13 14 11 17 02 00 00 04 18 17 14 02 42
    03E30 01 37 11 16 15 14 02 02 04 14 17 18 09 13 14 11
    03E40 17 1B 04 00 1D 10 14 02 01 00 14 17 18 0B 1B 0C
    03E50 00 1E 29 01 D0 0A 16 16 29 01 4E 1A 03 01 3E 1A
    03E60 03 14 02 F1 04 14 17 18 09 12 11 16 01 1E 0A 16
    03E70 1B B8 0B 11 11 15 1A 01 15 14 02 9E 04 14 17 18
    03E80 09 21 01 05 11 16 01 F9 0A 1B D2 01 1A 01 07 0A
    03E90 16 14 02 43 04 14 17 18 09 01 01 13 14 12 17 02
    03EA0 00 00 29 12 09 00 12 15 00 01 03 02 34 00 11 11
    03EB0 00 78 67 43 68 89 11 02 18 02 23 15 11 0F 01 02
    03EC0 00 24 00 01 00 FF FF 00 00 87 00 00 FF 00 00 00
    03ED0 04 14 17 18 08 12 63 00 01 80 0D 16 13 14 11 17
    03EE0 02 00 00 04 18 17 14 02 40 04 14 17 18 08 01 01
    03EF0 14 02 42 04 14 17 18 06 01 FF 29 11 16 1F 1F 1F
    03F00 11 20 20 20 0F 12 11 16 01 01 0A 16 11 11 15 0A
    03F10 11 16 15 15 29 11 16 01 00 11 12 12 15 11 01 0A
    03F20 11 16 15 14 02 02 04 14 17 18 09 13 14 11 17 02
    03F30 FF 00 04 18 17 16 15 14 02 9D 04 14 17 18 08 11
    03F40 01 F6 0A 11 16 15 12 11 16 01 01 0A 16 14 02 61
    03F50 04 14 17 18 06 29 11 12 11 01 00 11 16 15 12 14
    03F60 02 5D 04 14 17 18 09 11 01 30 0A 11 16 15 12 13
    03F70 14 11 17 02 00 00 04 18 17 14 02 D1 04 14 17 18
    03F80 08 14 02 A7 04 14 17 18 06 15 13 14 11 17 02 00
    03F90 00 04 18 17 14 02 EE 04 14 17 18 08 1A 03 14 02
    03FA0 D1 04 14 17 18 06 16 15 29 12 19 02 11 11 01 31
    03FB0 11 16 15 14 02 02 04 14 17 18 09 13 14 11 17 02
    03FC0 FF 00 04 18 17 15 14 02 F2 04 14 17 18 08 11 11
    03FD0 00 00 04 18 17 14 02 BF 05 14 17 18 08 1B BA 0B
    03FE0 19 01 20 11 14 02 02 04 14 17 18 09 13 14 11 17
    03FF0 02 FF 00 04 18 17 15 14 02 BF 05 14 17 18 08 14
    04000 02 C1 05 14 17 18 63 00 16 12 15 1B BA 0B 11 11
    04010 15 1A 01 15 11 12 11 16 01 30 0A 16 1A 03 01 2F
    04020 1A 03 15 0F 12 11 16 01 01 0A 16 1B B8 0B 12 11
    04030 16 19 01 0A 16 1B B8 0B 11 11 15 1A 01 15 14 02
    04040 9E 04 14 17 18 09 13 14 11 17 02 00 00 04 18 17
    04050 01 4A 14 02 C5 06 14 17 18 08 14 02 1A 06 14 17
    04060 18 06 01 3E 1A 03 14 02 F1 04 14 17 18 09 1B BA
    04070 0B 11 19 01 11 16 15 11 12 15 0A 11 16 15 11 14
    04080 02 02 04 14 17 18 09 13 14 11 17 02 01 00 04 18
    04090 17 15 14 02 1E 06 14 17 18 08 1B B8 0B 11 19 01
    040A0 11 16 15 11 14 02 02 04 14 17 18 09 13 14 11 17

    Merci Forthman
    En fait je sais que ce sont des questions reviennent régulièrement à mes exam alors je préfère bien border la chose

    Merci à vous

  7. #7
    Invité
    Invité(e)
    Par défaut
    C'est tout de même incroyable que tu ne te sois pas rendu compte que le code binaire fourni était TRES incomplet. Bon passons...
    J'ai écrit, dans mon précédent post, que le point d'entrée se situait à l'adresse absolue 03E82. Or, quand je pointe cette adresse, les 12 octets de code qui suivent sont totalement incohérents et ne permettent pas de d'afficher une série d'instructions cohérente.
    J'en conclus qu'il y a une mauvaise donnée quelque part (Es-tu sûr de tes CS et IP de départ ?). Du reste, tu ne nous as toujours pas expliqué ce qu'étaient A, B, RX et RY.

    Enfin, j'arrête en ce qui me concerne. Je trouve que tout ceci manque de sérieux. Si tu dois utiliser l'assembleur, tu n'obtiendras aucun résultat tangible tant que tu n'auras pas complètement assimilé toutes les bases (c'est valable pour toute la programmation en informatique quel que soit le langage). Et, ça se verra rapidement. Si te frottes à l'assembleur dans la perspective de briller dans les réunions mondaines, alors oublie...

  8. #8
    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
    Mais Asmou, qui t'a volé ton sucre d'orge ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Forthman Voir le message
    Mais Asmou, qui t'a volé ton sucre d'orge ?
    Là, nous restons au niveau de la cours d'école. Mais, bon. C'était un peu l'esprit de cette discussion dès le début, n'est-ce pas ?

  10. #10
    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
    c'est juste que j'étais surpris par ton dernier post, alors que jusque là les échanges étaient plutôt cordiaux, et que tu donnais de très bons conseils,
    Là on dirait que tu t'énerve alors que Steph n'avais juste pas donné les bonnes informations.

    C'est pas si grave, il débute

Discussions similaires

  1. Adresse relative et adresse absolue
    Par solorac dans le forum Excel
    Réponses: 2
    Dernier message: 03/10/2007, 12h08
  2. [TinyMCE] Problème adresses absolues et relatives
    Par will89 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 09/05/2007, 13h56
  3. Accès à un fichier avec une adresse absolue
    Par hmiezin dans le forum Langage
    Réponses: 4
    Dernier message: 04/03/2007, 23h25
  4. Adresse absolu de la dll dans un Webservice
    Par All Jinx dans le forum C++
    Réponses: 3
    Dernier message: 03/08/2006, 22h43
  5. [Excel] decaler de 2 lignes adresse absolue
    Par guns17 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/07/2006, 13h08

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