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/
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/
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)
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.
il peut y avoir plusieurs langage pour un même Assembleur ? je croyais que c'était 1 lg pour 1 assembleur
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...).
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 ?
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
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
Je ne comprend pas ta phrase vraiment :
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.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
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 :
Qui veut dire mettre 1 dans ton binaire , après la syntaxe étant relative a ton programme assembleur.
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
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
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part movb $0xFF, (%ebx)
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part mov ebx,0xff
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
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 ...???)
ben on te la répéter 1000 fois .
Maintenant que tu as compris , le probleme est résolu ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager