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 32-bits / 64-bits Assembleur Discussion :

MASM et assembleur GNU


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 62
    Points : 43
    Points
    43
    Par défaut MASM et assembleur GNU
    MASM est le langage assembleur pour microsoft et il y en a un pour nous je pensais que le langage assembleur et l'assembleur était lié au CPU et non à L'OS ? , pourriez vous m'expliquer :

    https://asm.developpez.com/cours/gas/

  2. #2
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2012
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 375
    Points : 1 030
    Points
    1 030
    Par défaut
    Bonjour,
    Ce qui est lié au CPU, c'est le langage machine, c'est-à-dire le code binaire des instructions. Par exemple, l'instruction INT qui déclenche une interruption logicielle dans l'exemple du tuto a pour opcode $CD (en hexadécimal). Ici l'instruction en assembleur est int $0x80 ce qui l'assembleur traduira par les octets $CD $80.


    Maintenant, dans l'introduction du tutoriel, il est bien rappelé qu'il existe deux syntaxes pour le langage assembleur :

    1) la syntaxe Intel : c'est celle qui est utilisée par MASM mais aussi par d'autres assembleurs (TASM, NASM etc)
    2) la synatxe AT&T : c'est celle qui est utilisée par l'assembleur as du projet GNU

    Dans les deux cas, c'est le même code machine qui est généré même s'il peut y avoir de légères différences dans le nom des instructions. Pour les noms des registres, ils sont préfixés par % en syntaxe AT&T (%eax) alors que ce n'est pas le cas avec la syntaxe Intel (eax).

    Une page Wikipédia donne plus de détails sur la syntaxe AT&T : AT&T (assembleur)

  3. #3
    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
    Pour ma part je vais détailler :

    -MASM est un assembleur orienté X86 Windows
    -GNU assembleur n'est pas forcément orienté x86 , il gère beaucoup d'autre plateforme.
    Tu en trouvera d'autre qui propose d'autre truc plus ou moins intéressant , y'a des assembleur pour tout les goûts j'ai envie de dire.
    Et surtout que l'assembleur n'est pas un langage normalisé d'ou ces différences syntaxes.
    Par contre il me semble qu'on peut mettre une syntaxe intel sur GNU assembleur.

    Ensuite le code assembleur il en existe qu'un seul mais si tu veux que ton code affiche un truc sous un OS ou autre (bref un truc qui n'est pas gerer par le CPU seul) , il faudrait passer par lui et donc la le code assembleur sera différent pour les différents OS.

  4. #4
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 62
    Points : 43
    Points
    43
    Par défaut re
    il peut y avoir plusieurs langage pour un même Assembleur ? je croyais que c'était 1 lg pour 1 assembleur

  5. #5
    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
    Pour reformuler ta phrase il peut y'avoir plusieurs langage assembleur pour un cpu oui.

    Après pour être plus clair voila en gros les différences que tu peux trouver :
    -sur les commandes spécifique du programme assembleur
    En gros une commande qui défini comment doit être écrit ton binaire s'il cible une cible d'architecture particulière (même si c'est le même cpu)
    -sur les commandes générales
    Par exemple l'écriture des données , les defines , les macro etc etc
    -sur la syntaxe des mnémoniques
    Comme la syntaxe at&t/intel , mais il existe certain qui change les mnémoniques (certe plus rare mais j'en est deja vu).

    Bref l'assembleur n'est pas un langage normalisé écrire toto ax,1 au lieu de mov ax,1 sur un programme assembleur que tu aurait écris ne serait pas faux (après bon courage pour que les autres comprenne).
    L'assembleur c'est juste un langage qui remplace les mnémoniques par des opcode (le reste c'est un plus ) , mais rien n'es normalisé (dans les autres langage ils sont normalisé mais s'il ne l'était pas tu trouverais par exemple autant de langage C que de compilateur...).

  6. #6
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    ok j croyais que l'asdsembleur était le compilateur compris avec le cpu je croyais qu on ne pouvait passer que par lui , mais on peut utiliser n'importe quel assembleur en fait compatible avec l'os ,j'ai bien compris , et je peux meme ecrire avec une autre syntaxe que celle de mon intel i5 6300hq si je veux ?

  7. #7
    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
    oui en va dire mais je vais pa me répeter , par contre ce n'est rien compris a ceci :
    j croyais que l'assembleur était le compilateur compris avec le cpu je croyais qu on ne pouvait passer que par lui

  8. #8
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    le prog pour asm pour traduire en langage machine est compris dans le cpu , et un seul langage est donc possible pour faire faire de l'asm

  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
    Je ne comprend pas ta phrase vraiment :
    le prog pour asm pour traduire en langage machine est compris dans le cpu , et un seul langage est donc possible pour faire faire de l'asm
    Sur un PC l'OS lis ton DD , met ton exécutable en RAM et puis l'exécute , donc il n'est pas dans le CPU.
    C'est le CPU qui exécute ton programme (qui n'est que du code binaire au final).

    Un programme assembleur traduit les mnémonique en binaire (et sur PC l'enregistre sur ton disque dur).
    Si tu met par exemple mov ax,1 = 0X0C 0X01
    et que sur l'assembleur shadok :
    shadok ax,1 = 0XC0 0X01
    Ben les deux sont valides.
    et comme pour le CPU 0X0C 0X01 veut dire mettre la valeur 1 dans AX , ben les deux code ont le même comportement.

    NT: la valeur de l'opcode est au pif hein , j'ai pas forcément regardé.

    Les autre différence peut etre dans la façon qu'on met les data par exemple tu peux avoir plein de syntaxe différente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .db 01
    db 01
    byte 01
    dc.b 01
    etc etc
    Qui veut dire mettre 1 dans ton binaire , après la syntaxe étant relative a ton programme assembleur.

  10. #10
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    je pensais en fait qu il y avait un seul prog assembleur , c'est à dire compilateur par ordi , là j ai compris que non ,

    mais maintenant quand vous dîtes que deux langage assembleur peuvent avoir la même syntaxe , pour moi ça veut dire que c'est le même langage

  11. #11
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 450
    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 450
    Points : 43 095
    Points
    43 095
    Par défaut
    Il y a plusieurs programmes assembleurs exemple NASM, MASM, GAS. FASM, etc.)

    Ceux-ci permettent de générer du code à destination de un ou plusieurs CPU (donc de générer du code machine différent ex: x86, Arm, 68000, etc.).

    Ces assembleurs utilisent une syntaxe plus ou moins compatible normalisée ou non.

    Exemple pour le chargement de 0xff dans EBX :
    syntaxe AT&T :
    syntaxe Intel :
    Les différences entre MASM et NASM mise à part la syntaxe Intel/AT&T (je ne pense pas que MASM puisse utiliser la syntaxe AT&T mais je suis pas sûs à 100%) vont être sur la façon de déclarer les segments, la façons de faire des macros.
    Tu peux jeter un oil ici : http://www.nasm.us/doc/nasmdoc2.html#section-2.2
    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

  12. #12
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    en fait c'est la même chose on est d'accord on a des compilateur différent comme des compil C mingw ou gcc apparement selon le compilateur comme MaSM ou GAS sauf que là le lanage change contrairement a gcc ou mingw le langage c ne change pas =>"selon ce que j ai pu voir par moi même lors de l'apprentissage du C" (a moins que ...???)

  13. #13
    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
    ben on te la répéter 1000 fois .
    Maintenant que tu as compris , le probleme est résolu ?

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 03/04/2018, 20h25
  2. Une introduction à l'assembleur 80x86, 32 bits, GNU GCC
    Par pierre.jourlin dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 04/04/2005, 17h34

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