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

Assembleur Discussion :

Syntaxe des constructeurs et des compilateurs, compatibilité des codes, syntaxe, syscall entre Linux et Unix


Sujet :

Assembleur

  1. #1
    Membre habitué
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Points : 144
    Points
    144
    Par défaut Syntaxe des constructeurs et des compilateurs, compatibilité des codes, syntaxe, syscall entre Linux et Unix
    Bonjour à tous.

    Voilà, j'ai quelques questions assez sensibles pour mes projets ; étant un vrai débutant, j'ai du mal :

    • il y a deux constructeurs principaux : AMD et Intel (et leurs architectures) ;
    • il y a plusieurs assembleurs : NASM, FASM, MASM, etc. qui utilisent des syntaxes et font la compilation ;
    • il y a plusieurs syntaxes : AT&T, Intel, autre ?
    • il y a plusieurs OS : Linux, Unix, Windows.

    Donc, j'ai un peu débuté sur NASM sur Linux, une fois j'ai voulu essayer sous Unix le même code et ça ne marchait pas (je crois qu'il m'a fallu faire des ajouts pour le faire fonctionner).

    J'aimerais comprendre ce qu'est la syntaxe des constructeurs et ceux des compilateurs.
    La compatibilité des codes, de la syntaxe, les syscall entre Linux et Unix.

    Merci d'avance.

  2. #2
    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
    C'est quoi exactement ta question ?
    Il y a bel et bien 2 constructeurs principaux pour le x86 et donc savoir que ton proc soit intel ou non n'a pas importance en soi vu qu'il se base sur la même architecture.
    A ma connaissance la plupart des assembleurs utilise la même syntaxe et sur x86 c'est la syntaxe intel qui domine largement , la seule différence entre ces assembleurs c'est les mot clé propre au assembleur, vu qu'il n'y a pas de règle a proprement parlé la dessus , ce qui peut les rendre incompatible entre eux (macro , define ect) .
    Sur X86 toujours il y a bien 2 syntaxes différentes , mais a ma connaissance c'est le seul qui possède 2 syntaxes , pour d'autre assembleur c'est souvent qu'une seule syntaxe (qui est imposé par le constructeur en général).

    Donc la syntaxe des constructeurs et des compilateurs sont les mêmes , après linux et unix sont légèrement différent si tu fais des appel système sachant qu'il y a des légeres différences normal que tu devra changer quelque truc , assembleur n'est pas un langage portable , on doit réécrire le code pour chaque processeur et OS différents.

  3. #3
    Membre habitué
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Merci.
    Vu que unix et linux sont un peu semblable je me disais s'ils sont compatible, il semblerait que oui mais avec des petits changement.
    Je voulais savoir s'il existait que deux syntaxe pour amd et intel, c'est compris.


    Ma question global et principale maintenant est celle-ci:
    Par exemple, sur nasm on ajoute des lignes comme:
    section .data
    section .text
    global _start
    _start:
    etc, je voulais savoir si ceux-ci sont aussi inclus dans la syntaxe de l'assembleur intel ou c'est propre à nasm qui a fait des rajouts.
    Ainsi, je voulais voir si je pouvais utilisé directement la syntaxe intel et le compiler.
    Comme pour éviter une couche en plus que fournirait nasm par rapport à l'assembleur intel.


    Merci encore.

  4. #4
    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 076
    Points
    43 076
    Par défaut
    En sections, tu devrais toujours avoir .text, .data, .bss (.bss c'est pas obligatoire)
    .text=zone du code
    .data=zone des données initialisées
    .bss=zone des données non initialisés

    global _start : c'est le point d'entrée de ton code. Celui-ci peut varier d'un système à l'autre (c'est ce qu'attend le linker)

    amd et intel sont compatibles, c'est le même assembleur. Tu auras des différences sur la gestion du bit NX, sur la gestion de la virtualisation (Intel VT-X contre AMD-V), mais globalement c'est pareil.

    avec les CPUs Intel et AMD, tu peux utiliser la syntaxe Intel ou AT&T, ça c'est un choix au niveau assembleur, nasm utilisera la syntaxe Intel par défaut, d'autres assembleurs non.

    Pour les processeurs de type ARM , la syntaxe utilisée sera AT&T.

    GAS (Gnu ASsembler) est multi-plateforme, il peut donc assembler pour Intel, ARM, etc.... Sa syntaxe par défaut est AT&T, mais tu peux la forcer en Intel avec une directive.

    Enfin concernant la compatibilité, comme l'as dit Kannagi, l'assembleur c'est pas fait pour être portable. Tu as cependant une portabilité relative sous les réserves suivantes :

    - pour pouvoir lancer l’exécutable, il faut que le système reconnaisse celui-ci, exemple Linux utilise le format ELF, windows le format PE. Il y en a d'autres, moins dépendus.
    Ensuite, les appels systèmes ne fonctionnent pas pareil sous Linux et sous BSD par exemple (et encore pire sous windows), pourtant en est toujours sous unix-like. Linux va être je crois capable d’exécuter les appels systèmes (info à vérifier) mais l'inverse ne sera pas le cas.

    Ensuite, il te faut comme sous Windows les bonnes bibliothèques (.dll sous Windows au format PE, .so sous Linux au format ELF), ton exécutable assemblé sous Debian fonctionnera sous Fedora si tu as les bonnes bibliothèques.

    Le langage C permet de pallier à ce problème, il suffit de compiler à partir des sources sur la bonne plateforme pour que ça fonctionne. Tu peux intégrer de l'assembleur dans du code C.
    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

  5. #5
    Membre habitué
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Voila qui est parfait.

    Merci à vous.

  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
    Citation Envoyé par kripteks Voir le message
    Merci.

    Par exemple, sur nasm on ajoute des lignes comme:
    section .data
    section .text
    global _start
    _start:
    etc, je voulais savoir si ceux-ci sont aussi inclus dans la syntaxe de l'assembleur intel ou c'est propre à nasm qui a fait des rajouts.
    Ainsi, je voulais voir si je pouvais utilisé directement la syntaxe intel et le compiler.
    Comme pour éviter une couche en plus que fournirait nasm par rapport à l'assembleur intel.
    Alors je te l'ai deja dit mais ceci sont des rajouts de nasm ,l'assembleur ce n'est qu'une façon lisible du binaire.
    Après ces directives (qui peuvent varié vu les assembleur mais c'est normal chaqu'un l'écrit comme il le sent)sont obligatoire me semble t-il si on veut pouvoir le compiler pour avoir un exécutable ( vu que le format ELF ou PE sont un peu complexe).
    Enfin ce qui rend plus souvent incompatible sont souvent les base , principalement le rajout de point pour certain par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .db ou db
    .include ou include
    Sans parlé des directive propre a une architecture ou OS en particulier , le rajout des macro qui est la très différent dans chaque assembleur que j'ai pu testé , et surtout le rajout de label temporaire que j'utilise souvent et qui est totalement différent a chaque assembleur.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/09/2009, 19h41
  2. Réponses: 2
    Dernier message: 28/09/2009, 19h41
  3. compatibilité des réels avec pascal (pour fichier de record)
    Par jacquesberger dans le forum Langage
    Réponses: 2
    Dernier message: 12/08/2005, 19h58
  4. [Compilateur] Optimisation des conditions
    Par Pedro dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2004, 13h49
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

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