Comment apprendre l'assembleur ?

Résolu/Fermé
wassil56 Messages postés 82 Date d'inscription mardi 12 mai 2015 Statut Membre Dernière intervention 16 octobre 2015 - 27 juin 2015 à 00:25
 Utilisateur anonyme - 7 juil. 2015 à 08:49
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
A voir également:

3 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
27 juin 2015 à 00:34
'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
wassil56 Messages postés 82 Date d'inscription mardi 12 mai 2015 Statut Membre Dernière intervention 16 octobre 2015 3
27 juin 2015 à 02:18
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
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 27/06/2015 à 01:23
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
wassil56 Messages postés 82 Date d'inscription mardi 12 mai 2015 Statut Membre Dernière intervention 16 octobre 2015 3
27 juin 2015 à 02:25
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
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
wassil56 Messages postés 82 Date d'inscription mardi 12 mai 2015 Statut Membre Dernière intervention 16 octobre 2015 3
7 juil. 2015 à 01:28
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
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > Utilisateur anonyme
7 juil. 2015 à 08:26
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
Utilisateur anonyme > ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021
Modifié par shaynox le 7/07/2015 à 08:50
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