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

Delphi Discussion :

Utilisation de l'assembleur i386 en Delphi


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut Utilisation de l'assembleur i386 en Delphi
    Je suis un ancien superutilisateur de TurboPascal surtout l'assembleur intégré dans cet EDI.
    Aujourd'hui, je me baigne totalement dans le monde Win32 avec Delphi mais j'aimerais maintenant m'attaquer au côté micro-informatique de cet EDI.
    Sous TurboPascal autrement dit sous DOS, l'adressage mémoire se fait en SEGMENT:OFFSET.
    Sous Delphi autrement dit sous Win32, à quoi sert les registres de segment (CS, DS)de nos jours alors qu'un exécutable travaille dans une mémoire non physique!
    Ma question est donc: est-ce qu'on peut accéder à des cases mémoire en assembleur sans passer par des API Windows ?
    Comment fait-on pour faire MOV EAX,CS:456789h ?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Dans une appli Delphi, les registres de segments sont il me semble constants. On ne travaille plus avec ceux-ci.

    À part les API, il est très difficile d'accéder à des infos système.

    Cela dit, l'assembleur en ligne existe toujours et est très utilisé (enfin par certains )
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    En assembleur 32 bits mode protégé, les choses sont effectivement très différentes du mode réel 16 bits. Il faudrait que tu cherches plus de documentation dans la partie assembleur du site.

    Sinon, pour le troll ( ) de service : moi, j'utilise l'assembleur en ligne !

    Edit : à la question "est-il possible d'accéder des cases mémoires etc.", la réponse est non, en dehors de l'espace d'adressage du processus ! C'est pour ça que ça s'appelle le mode protégé, et il est facile de comprendre l'utilité de ce comportement.

  4. #4
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    J'ai lu le tutoriel de Nono40, merci sjrd!
    Avant de chercher dans la partie asm qui est consacré en majorité à l'asm 16bits encore plus ou moins valable pour 32bits,
    je suis d'accord que les registres de segment sont initules à modifier dans Delphi,
    le terme OFFSET ou déplacement est-il toujours valide? EIP est déja à 32 bits donc peut accéder à une adresse effective mais plus une valeur de déplacement?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  5. #5
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Oui, les termes d'Offset et de Segment sont toujours utilisés, sauf qu'en 32 bits, les segments peuvent faire 4 Go, c'est-à-dire l'intégralité de la mémoire adressable.

    En conséquence de quoi, le registre CS est utilisé par l'OS pour gérer les espaces d'adressage du mode protégé et ne doit en aucun cas être utilisé ou modifié par logiciel.

    L'adressage est absolu du point de vue du programme, mais relatif du point de vue de Windows qui, rappelons-le, peut déplacer des blocs de mémoire ou les mettre en cache en fonction des besoins.

    Ce n'est donc pas qu'il n'y a plus besoin de préciser une adresse de segment, c'est carrément interdit par la nature même du mode protégé ! L'Offset suffit.

    Pour répondre à ta question : on écrirait :

    Code qui fonctionne à condition que l'octet 456789h fasse partie de l'espace adressable du processus en cours, sinon c'est la fameuse erreur de violation d'accès !

    Par ailleurs, sous delphi, attention ! Certains registres doivent être sauvegardés à cause du run-time, d'autres sont utilisés pour le passage des paramètres d'une façon différente en fonction des conventions d'appel.

    Bon courage.

  6. #6
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Bon, merci à tous et bonne continuation dans le développement ASSEMBLEUR !
    Hi hi!
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  7. #7
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    huhuhu
    Oui, mais pour utiliser les particularités propres à l'assembleur in-line de Delphi, tu auras besoin du forum Delphi.
    hohoho

Discussions similaires

  1. [TOPIC OFFICIEL] Comment utiliser le RDC de Crystal en Delphi ?
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 21/12/2009, 12h24
  2. utilisation de l'assembleur ?
    Par sali dans le forum C
    Réponses: 7
    Dernier message: 16/09/2005, 20h59
  3. Réponses: 4
    Dernier message: 13/07/2005, 11h55
  4. Utilisation de l'Assembleur
    Par dway dans le forum Assembleur
    Réponses: 19
    Dernier message: 09/08/2003, 00h22
  5. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 09h19

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