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

  1. #1
    Membre averti
    [Tutoriel] Découverte de l'assembleur Intel avec NASM
    Bonjour,

    Vous trouverez à cette adresse : http://esauvage.developpez.com /tutoriels/asm/assembleur-intel-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é
    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é
    Super article, j'aime beaucoup (le fond et la forme )

  4. #4
    Membre habitué
    C'est absolument génial !
    J'adore la manière dont c'est écrit.

  5. #5
    Membre régulier
    Superbe!! Merci beaucoup c'est exactement ce qu'il me fallait

  6. #6
    Membre averti
    Merci à tous.

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

  7. #7
    Membre éclairé
    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é
    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
    La suite est en préparation ici :
    http://esauvage.developpez.com/tutoriels/asm/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é
    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
    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é
    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é
    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
    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
    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
    N'effet, je devais être saoul. Corrigé et cité.

    Merci.

    P.S. Merci aussi pour ça.

  17. #17
    Membre à l'essai
    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
    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
    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
    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.

###raw>template_hook.ano_emploi###