Comment apprendre l'assembleur ?

Résolu
wassil56 Messages postés 100 Statut Membre -  
 Utilisateur anonyme -
salut
afin de mieu comprendre comment fonctionne les systemes d'exploitation je souhaiterais apprendre lassembleur, mais je en sais pas par ou commencer car en cherchant j'ai trouvé qu'il y avait plusieurs types d'assembleurs qui varient selon le type de processeurs, l'architecture (32 ou 64) et l'assembleur de windows et GNU linux n'est pas pareil O.o
j'ai peut etre mal compris mais quel assembleur devrais je apprendre ? je possede linux debian ? dois je apprendre un assembleur GNU ?
merci de m'éclairer parce que je suis perdu

3 réponses

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut
    l'assembleur de windows et GNU linux n'est pas pareil
    Si, c'est pareil. Ce qui change, c'est la syntaxe, typiquement celle d'Intel sous Windows et celle d'AT&T (par défaut dans les outils de compilation GCC) sous Linux.
    Toutefois il est reconnu que la syntaxe d'Intel est plus lisible. Et on peut changer la syntaxe en Intel avec le marqueur
    .intel_syntax
    .
    qui varient selon le type de processeurs, l'architecture (32 ou 64)
    Différences entre processeur, c'est normal. Les deux plus fréquents que tu croiseras sont x86/64 et ARM. Entre x86 et x86_64, il y a des différences mais du code x86 marche sur x86_64 vu que x86_64 en est une extension.

    Tu peux choisir de prendre l'assembleur GNU (
    as
    ), ou d'autres comme NASM, dispo sur les dépôts Deban.
    1
    1. wassil56 Messages postés 100 Statut Membre 3
       
      salut gravgun
      d'abord je vais retenir que assembleur windows et linux sont pareil :)
      et je vais aussi prendre votre conseil et apprendre l'assembleur GNU
      je vien de trouver un tuto qui a l'air bien https://asm.developpez.com/cours/gas/
      et merci pour les explications :)
      0
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Sous Linux un bon exercice est d'assembler un module C et d'examiner les mnémoniques assembleur générés.
    exemple:
    johand@bata:~/src/CCM$ cat test-asm.c
    #include <stdlib.h>
    #include <stdio.h>
    
    int somme2(int x, int y)
    {
      x++;
      y++;
      return x +y;
    }
    johand@bata:~/src/CCM$ gcc -Wall -m32  -S -o test-asm.s test-asm.c 
    johand@bata:~/src/CCM$ cat test-asm.s
     .file "test-asm.c"
     .text
     .globl somme2
     .type somme2, @function
    somme2:
    .LFB2:
     .cfi_startproc
     pushl %ebp
     .cfi_def_cfa_offset 8
     .cfi_offset 5, -8
     movl %esp, %ebp
     .cfi_def_cfa_register 5
     addl $1, 8(%ebp)
     addl $1, 12(%ebp)
     movl 8(%ebp), %edx
     movl 12(%ebp), %eax
     addl %edx, %eax
     popl %ebp
     .cfi_restore 5
     .cfi_def_cfa 4, 4
     ret
     .cfi_endproc
    .LFE2:
     .size somme2, .-somme2
     .ident "GCC: (Debian 4.9.2-16) 4.9.2"
     .section .note.GNU-stack,"",@progbits
    


    Jette un oeil sur The GNU Assembler
    Gates gave ^W sold you the windows.
    GNU gave us the whole house.(Alexandrin)
    0
    1. wassil56 Messages postés 100 Statut Membre 3
       
      salut jisisv
      et merci pour l'exemple
      O.o en meme temps je vois que l'assembleur est un peu terifiant
      encore merci
      ps:je vairé l'article en detail demain parce que mtn j'ai unpeu de mal a tenir debout :p
      Zzzzzzzzz
      0
  3. Utilisateur anonyme
     
    Quel assembleur choisir ?

    À toi de voir, il y a des centaines d'architectures possibles et des dizaines de syntaxes aussi x)

    Perso j'opterais pour la facilité de développement, donc tu dois choisir par toi-même en regardant les différences de programmation entre archi et syntaxe.

    Va sur les sites des constructeurs de l'arch que tu veux analyser et regardes sa documentation sur son langage d'assemblage.

    Après je te conseillerais la syntaxe intel couplée avec nasm en x64 (x86 dépassé depuis 2006), pourquoi ? c'est avec cela que je developpe et donc que je préfere x)

    Enfin je n'ai pas vraiment fait de reel comparaisons entre toutes les arch et syntaxe, juste qu'il faut bien se décider un moment et s'y tenir à cette décision.
    (Même s'il y a de meilleures arch/syntaxe qu'intel/nasm)

    Et pour la syntaxe at&t, si tu en conclues que l'assembleur est terrifiant rien qu'en la regardant, oublie l'at&t alors x)

    afin de mieu comprendre comment fonctionne les systemes d'exploitation je souhaiterais apprendre lassembleur

    Hmm, l'apprentissage de l'assembleur ne suffit pas, il te faudra lire les volumes 1, 3A, 3B, 3C pour le squelette de l'OS (les volumes 2A, 2B, 2C sont pour la description des instructions).https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html

    Et aussi te documenter sur les protocoles de communications des différents hardwares qu'un OS doit gérer à la base et aussi inspire-toi d'un OS (pas entièrement) aussi, par exemple tu décris ses réactions, en somme tu fait un reverse engenering de son fonctionnement en tout point.

    Basic asm standard: reg(lowercase) instruction(lowercase) -> instruction ... dest, src
    (\___/)
    (='.'=)
    (")_(")
    This is Bunny. Copy and paste bunny into
    your signature to help him gain world domina
    0
    1. wassil56 Messages postés 100 Statut Membre 3
       
      shaynox je ne te remercierais jamais assez pour toutes ces précision surtout sur les squelettes des os
      j'ai aussi trouvé des livres (en anglais) qui traitent l'assembleur et les architectures des systemes d'exploitation
      je prefere prendre ton conseil en apprennant l'assembleur d'intel
      dans tout les cas j'espere vous trouver pour d'autres questions
      et merci :)
      0
    2. Utilisateur anonyme
       
      De rien ^^

      Sinon dernier point que j'ai oublié de dire, j'ai fait un petit OS en mode texte x64 contenant plein de ressources aussi, sauf pour le multi tasking (que je n'aime pas trop) ^^

      https://sourceforge.net/projects/shaynoxhackos/
      0
      1. ElementW Messages postés 5690 Statut Contributeur 1 293 > Utilisateur anonyme
         
        sauf pour le multi tasking
        C'est bête, c'est quand même un des trucs basiques qu'on attend d'un OS/noyau... même si je conçois que ça soit pas facile à coder.
        0
      2. Utilisateur anonyme > ElementW Messages postés 5690 Statut Contributeur
         
        Hmm surement, mais ce n'est vraiment pas ma priorité, car je n'ai pas encore fait de sérieux test concernant la comparaison entre multi-tasking et mono-tasking, il est certes qu'en mono cela va plus vite, mais la question est quel est le pourcentage de différence.


        Pour faire le test, je le ferais avec un moteur 3D n'utilisant que le CPU pour ses calculs.
        Et si le test est en faveur du mono tasking, alors je prendrais cette voie-là pour exécuter mes jeux.
        (Après est-ce que j'ai besoin du multitasking dans mes jeux ? pour l'instant j'ai réussi à détecter plusieurs touches sans son aide)

        Sinon bien que le multitasking soit le quotidien des utilisateurs de PC, je ne l'aime pas du fait que c'est vraiment une technique pointue dans un monde low level.

        Enfin il faudra bien à un moment que je m'y penche dessus, mais j'essayerais par tout moyen de ne pas emprunter l'aide du CPU pour, je me suis toujours dit que ce n'est pas au CPU de faire ce boulot.


        J'ai entendu parler de changement de task via l'horloge interne, me suis jamais documenté sur ça par contre.
        0