Pour commencer [Résolu]

Signaler
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
-
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
-
Bonjour a tous.
j'ai des connaissance en Java et j'aimerais apprendre l'Assembleur. je me suis déjà un peu rensseigné sur le net et j'ai trouver quelque tutos. Cependant, les avis restent assez partagés sur quel compilateur utiliser et aussi sur quel éditeur utiliser. J'aimerais avoir vos avis pour débuter en Assembleur dans les meilleurs conditions ;-)

merci.

8 réponses

Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
15
http://uk.geocities.com/rob_anderton/

telecharge naside (l'executable pas la version java qui est pas au point)

ensuite il te fait tout automatiquement meme le link ^^

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
2
Bonjour didoux95,


Lorsque tu veux réaliser un fichier exécutable tu dois effectuer les opérations suivantes:


1) Ecrire un programme (format texte) contenant les instructions (mnémoniques) devant être exécutées pas le microprocesseur. Pour des questions de commodité les adresses ne sont généralement pas écrites en dur mais font références à des labels du style
      jne fin
      xxx
      yyy
      zzz
fin   suite du programme

Si le résultat est différent de zéro alors va à fin sinon exécute xxx, yyy et zzz

Si tu utilises des labels appartenant à un autre morceau de programme (assemblé par ailleur), il faudra que tu déclares ces label comme provenant d'un fichier externe.

2) Compiler le programme
C'est là que Nasm intervient, son rôle est de transformer les instructions sous forme de mnémoniques en octets. Par exemple
mov dx,hello devient BA 0C 01 (écriture dont la compréhension est moins évidente). BA correspond à mov dx et 0C 01 correspond à l'adresse de hello, en l'occurence l'adresse d'offset 010C. L'offset 0100 correspond au début du programme .com (c'est la directive org 0x100) et 0C (soit 12 en décimal) est la distance entre le début du programme et l'étiquette hello (c'est en fait la longueur de la section programme car hello est la première étiquette de la section de données).
Si ton programme n'utilise pas de références externes la compilation (format -fbin) te donnera quelque chose de directement exécutable (si le nom du programme compilé est xxx.com. Dans le cas contraire tu devras passer par un fichier objet qui contiendra la conversion mnémoniques/octets mais aussi les références externes nécessaires (labels externes, bibliothèques, fonctions importées).

3) Effectuer l'édition des liens.
C'est là qu'alink (ou un autre linker) intervient. Son rôle est de rassembler les différents morceaux compilés, par exemple programme principal et sous programmes, ressources et de résoudre les problèmes de références aux étiquettes. Tu pourras avoir par exemple:
alink -oPE programmeprincipal.obj sousprogramme.obj ressource.res win32.lib

Ce qui se traduit en:
crééer un exécutable windows (format PE) en rassemblant programmeprincipal.obj (déjà compilé)
sousprogramme.obj (déjà compilé)
ressourse.res (ressource compilée format .res - elle peut aussi être compilée en .obj pas GoRC)
win32.lib    librairie contenant des tas de déclarations,
 
Si le programme déclare une référence comme extern, il faut que cette même référence ait été déclarée comme global pas le module où elle se situe (pour qu'elle soit vue pas les autres modules.

J'espère que j'ai pu t'éclairer sur ce point.
Nota: dans la souce citée en référence j'ai mis les instructions de compilation et pour l'édition des liens. Ce qui est entre crochets (facultatif) sert à donner un nom de sortie spécifique (dans ce cas il faut enlever les crochets)

A+
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
2
Bonjour,

Personnellement j'utilise Nasm, assembleur multi plateforme qui permet de compiler sous plusieurs formats, omf, coff, coff pour windows, binaire.
Il est simple d'emploi et est téléchargeable sur sourceforge.net

Pour l'édition des liens j'utilise alink (télechargeable sur le même site)

Pour la compilation des ressources j'utilise gorc

Enfin pour travailler de façon plus conviviale j'utilise ConText comme IDE.
Ce dernier permet d'éditer le programme (éditeur de texte) mais également possède des boutons d'action paramètrables pour lancer la compilation, l'édition de liens etc.

Un conseil pour débuter, regarde les sources les plus simples pour comprendre les différentes instructions en assembleur. L'assembleur n'est pas un langage très compliqué (les instructions sont en nombre limité), ce qui complique les choses c'est l'utilisation des fonctions du système d'exploitation (en bien plus grand nombre).
Un programme assembleur utilisant les interruptions DOS ou les API windows sera à reprendre quasiment en entier pour fonctionner sous unix et vice versa.

C'est un langage très proche de la machine, des instructions pour un Pentium ne fonctionneront pas sur un microprocesseur plus archaïque.

A+
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
slt.
Merci pour ta réponse. Est ce que tu pourait m'en dire plus sur Nasm (je l'ai téléchargé et je me retrouve avec trois fichiers : deux .exe. et un .FICHIER donc je suis un peu perdu).

merci.
Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011

Salut,

tu trouveras un tutorial pour nasm sur ce lien :
http://home.comcast.net/~fbkotler/

Ne pas oublier que google est ton meilleur ami ;)

Gentoo... que du bonheur ...
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
2
Rebonjour didoux95,

S'il y a plusieurs fichiers exécutables c'est que chacun est conçu pour fonctionner sur des environnements différents:
Si tu travailles sur une plateforme Windows 32bits (ce que j'estime fort probable), c'est le Win32 binaries qui t'interesse. Si tu travailles sous DOS ou Linux tu devras télécharger DOS binaries ou Linux RPM binaries.

Sous windows tu auras l'exécutable nasmw.exe (assembleur) et ndisasmw.exe (desassembleur).
Je te conseille de télécharger le chm manual pour savoir utiliser nasm.
Ce dernier fonctionne en mode console (ligne de commande) par exemple:


nasmw -fbin monfichier.asm   donne un fichier binaire pur (pour .com .sys)
nasmw -fobj monfichier.asm   donne un fichier .obj (format omf) - pourra alors transformé à l'édition de liens en exe, dll
d'autre formats sont disponibles pour Linux etc...

Si tu veux t'exercer à la compilation avec Nasm, regarde une de mes précédentes sources
http://www.asmfr.com/codes/CREATION-DIFFERENTS-EXECUTABLES-AVEC-NASM-ALINK_37036.aspx

A+
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
Bonjour.
j'ai regarde le lien que tu m'a passé et ...
c'est pas contre toi, mais j'ai rien compris. peut-être est ce par ce que je suis sur l'assemble depuis ce matin mais bon je suis un peu larguer.
Ce que j'ai compris : il faut compiler le .asm anvant d'en faire un .exe un .dll ou autre.
Ce que je n'ai pas compris: comment utiliser Alink pour "convertir" le fichier compilé en .exe (donc, entre autre, utiliser ta source).

je te remerci de bien vouloir m'aiclairer parceque je dois avouer que là j'arrive plus a suivre lol.
merci.
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
Merci beaucoup.
je commence comprendre pas mal de choses.