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 :

[Tutoriel] Découverte de l'assembleur Intel avec NASM


Sujet :

Assembleur

  1. #1
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut [Tutoriel] Découverte de l'assembleur Intel avec NASM
    Bonjour,

    Vous trouverez à cette adresse : http://esauvage.developpez.com/tutor...tel-avec-nasm/ un parcours du combattant, un cheminement de quelqu'un qui, partant d'à peu près rien, essaye d'arriver à pas beaucoup plus mais quand même.

    Ce n'est pas vraiment un tutoriel parce que ça n'a pas d'objectif précis, ce n'est pas un cours car c'est riche en approximations. C'est plutôt le suivi d'un trappeur face à l'immensité canadienne.

    Néanmoins, comme j'ai remarqué que visiblement et contre toute attente, ça intéresse des gens, je crée cette discussion afin de recueillir les retours éventuels.

    Cordialement,

    Le chevalier au taureau.

    PS : Voir aussi les autres cours et tutoriels pour apprendre l’assembleur : http://asm.developpez.com/cours/

  2. #2
    Membre habitué

    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2011
    Messages : 115
    Points : 188
    Points
    188
    Par défaut Note de Remerciment
    Merci pour le tuto, c'est vraiment sympa de ta part.
    Innovation = Blending of idea , science and practice engineering

  3. #3
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut
    Super article, j'aime beaucoup (le fond et la forme )

  4. #4
    Membre habitué
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Points : 176
    Points
    176
    Par défaut
    C'est absolument génial !
    J'adore la manière dont c'est écrit.

  5. #5
    Membre régulier
    Homme Profil pro
    http://tuatini-godard.me/
    Inscrit en
    Décembre 2010
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : http://tuatini-godard.me/

    Informations forums :
    Inscription : Décembre 2010
    Messages : 70
    Points : 93
    Points
    93
    Par défaut
    Superbe!! Merci beaucoup c'est exactement ce qu'il me fallait

  6. #6
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Merci à tous.

    Néanmoins, si vous avez des questions, n'hésitez pas.

  7. #7
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut
    Citation Envoyé par Chevalier au taureau Voir le message
    Néanmoins, si vous avez des questions, n'hésitez pas.
    Est-ce qu'il y aura une suite ?

  8. #8
    Membre habitué

    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2011
    Messages : 115
    Points : 188
    Points
    188
    Par défaut Reponse au Discussion
    O fet,
    Lorsque j'utilise NASM, il compile bien le programme mais à l’exécution , il dit que nasm ne peut pas exécuter le programme .com
    J'utilise ton exemple là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    org 0x0100 ; Adresse de début .COM
        ;Ecriture de la chaîne hello dans la console
     
    mov ah, 0x9
    mov dx, hello
    int 0x21
    ret
    hello: db 'Bonjour papi.', 10, 13, '$'
    Commande de compilation sous nasm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nasm -f bin hello.asm -o hello.com
    Ca marche bien , mais à l'exécution ca donne
    Cannot execute hello.com
    Innovation = Blending of idea , science and practice engineering

  9. #9
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    La suite est en préparation ici :
    http://esauvage.developpez.com/tutor...m/nasm-protege

    C'est étrange, je viens de le refaire, chez moi il n'y a aucun souci. Cette commande suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nasm -o hello.com hello.asm
    Le fichier hello.com fait-il bien 24 octets ?

  10. #10
    Membre habitué

    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2011
    Messages : 115
    Points : 188
    Points
    188
    Par défaut
    Le fichier *.com est bien de 24octets,mais meme en utilsant ta méthode de compilation, le message ce ré affiche ,
    J'ai utilisé le TASM pendant 1 ans demi mais en lisant ton tuto je pense de changer de compil(surtout le bootloader), J'utilise le nasm 2-2.09.07
    Innovation = Blending of idea , science and practice engineering

  11. #11
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Mm. Ennuyeux. Quel système d'exploitation ? Il faudrait peut-être essayer le mode de compatibilité XP ? J'arrive à le lancer sous XP, même en passant par l'interface graphique.
    Personnellement j'ai la version 2.07 du 19 juillet 2009.

  12. #12
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    fasmw aussi il est pas mal pour coder en asm.

    suffit de cliquer sur un seul bouton


    pour les inconditionels de la ligne de commande, il n'y a même pas besoin de paramètres autres que le fichier d'entrée:
    Citation Envoyé par msdos

    C:\>fasm test0.asm
    flat assembler version 1.69.14 (433477 kilobytes memory)
    2 passes, 24 bytes.

    C:\>test0
    Bonjour papi.

    C:\>
    pourquoi faire simple quand on peu faire compliqué?

  13. #13
    Membre habitué

    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2011
    Messages : 115
    Points : 188
    Points
    188
    Par défaut
    Ahhh! Peut être que c'est un problème de OS, car j'utilise VISTA
    Innovation = Blending of idea , science and practice engineering

  14. #14
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Ca doit être ça. Décidément, j'ai Vista en horreur (c'est, j'en conviens, un a priori). Bon, alors d'autres personnes ont renconté le même problème (faire fonctionner des programmes DOS sous Vista) et différentes solutions ont émergé :
    - Utiliser DOSBox;
    - Lancer "cmd.exe" en mode de compatibilité inférieure (ce qui m'a l'air d'une horrible traduction) et en tant qu'administrateur;
    - Utiliser une machine virtuelle, avec FreeDOS dessus;
    - etc.
    Je ne sais pas laquelle est la meilleure, n'ayant pas de Vista sous la main. Mais je veux bien être tenu au courant des avancées dans ce domaine, ça me permettrait d'être à jour.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Je ne sais pas si je dois le signaler ici, mais j'ai noté une petite erreur sur cette page.

    Dans le paragraphe VIII.1.a. L'architecture des premiers Personal Computers, je cite :

    Cette architecture permet d'accéder à 2^20 octets de mémoire vive, plus ou moins un. Ca fait 1 gigaoctet.
    Il est bien entendu que cela fait en réalité 1Mo, et que cette quantité de mémoire était largement suffisante aux besoins qui régissaient les premiers temps de cette architecture.

    Bonne journée

    PS : Félicitations pour l'initiative de ce tutorial (sujet peu traité de manière simple et exhaustive en français) et pour les qualités de rédaction qui le rendent très agréable à lire !

  16. #16
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    N'effet, je devais être saoul. Corrigé et cité.

    Merci.

    P.S. Merci aussi pour ça.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Points : 17
    Points
    17
    Par défaut
    Amusant ce tutoriel. Un brin nostalgique. Cela me rappelle mon DUT et les cours d'assembleur Z80. Comme TP on avait à écrire des routines Entrée-Sortie (Affichage écran, Saisie clavier, lecture et affichage d'un secteur de disquette). En gros réécrire une petite partie de l'OS. C'était le début du PC et de MSDOS. En fonction de la compréhension de chacun une même routine pouvait tenir en 20 lignes ou 200 ! Il y avait un petit futé qui avait fait tenir ses programmes en 5 lignes : il se contentait de faire appel aux fonctions du DOS (il s'était procuré une documentation américaine explicitant ces fonctions !). Merci de ce moment de divertissement.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Bonjour à tous !

    Tout d'abord merci pour cet article, je n'ai fait que le feuilleter rapidement mais il a super bien fait, exactement ce que je recherchais !

    J'ai une petite question cependant, j'ai vu sur le site de NASM que le logiciel est multiplateforme, notamment utilisable sous Linux et BSD.

    Est ce que les codes fournis dans ton article sont utilisables sous d'autres OS ou est ce qu'un OS Windows est absolument indispensable ?

    Le premier code qui me vient à l'esprit est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    org 0x0100 ; Adresse de début .COM
        ;Ecriture de la chaîne hello dans la console
     
    mov ah, 0x9
    mov dx, hello
    int 0x21
    ret
    hello: db 'Bonjour papi.', 10, 13, '$'
    Est ce que l'entête qui, d'après ce que j'ai compris, sera complété par NASM en fonction du système d'exploitation, fera également 256 octets sous Linux et BSD ou est ce qu'une autre valeur doit être utilisée afin de pouvoir exécuter le programme sous ces OS ?
    Est ce qu'en dehors de ça il y d'autres choses qui pourraient posaient problème en terme de compatibilité ?

    Cordialement
    Matarc

  19. #19
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 341
    Points
    341
    Par défaut
    Bonjour,

    Ne serait-ce qu'à cause de int 0x21, il s'agit d'un code DOS. Uniquement DOS. Il se trouve que Windows contient DOS quelque part, tout au moins jusqu'à la version Vista, et que par conséquent, ce code est exploitable sous Windows.
    Tous les codes de l'article utilisant un système d'exploitation sont conçus sous Windows et ne peuvent fonctionner tels quels sous un autre système d'exploitation.
    L'en-tête ne fera pas 256 octets sous un autre système d'exploitation, parce qu'il utilisera à coup sûr un autre format de fichiers exécutables. C'est d'ailleurs l'une des raisons pour lesquelles un programme Windows ne tourne pas sous Mac.
    Pour Linux, il faut jouer avec les segments, et la directive org a moins de raisons d'être. De surcroît, il me semble me souvenir que la sortie de l'exécutable est manuelle.
    Bref, la compatibilité est loin d'être garantie et ne saurait être trouvée avec ce simple code. C'est la gestion des segments et l'utilisation de bibliothèques multi-plateforme qui permet la compatibilité.

    En espérant avoir été clair et répondu à la question,

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Merci d'avoir pris le temps de me répondre, je vais alors essayer de suivre cet article en cherchant de la doc en parallèle pour pouvoir faire ça sous linux.

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/05/2008, 12h29

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