Salut,
En version courte, les tutos et bouquins que tu trouveras sur Internet pour apprendre l’assembleur sont à chier. Entre autres, parce qu’ils commencent systématiquement par l’assembleur 16 bits, qui est obsolète depuis 20 ans. C’est ce qui explique que ton .COM
ne marche pas.
Il va falloir que je remette en ligne mon début de cours d’assembleur…
La version plus longue en EDIT.
EDIT : comme pour le Seigneur des Anneaux, la version longue…
Basiquement, l’assembleur n’est rien d’autre que le code machine retranscrit sous une forme compréhensible par un humain. Il existe donc une forme d’assembleur par famille de processeurs, et elles sont incompatibles entre elles : par exemple, le tuto que tu as commencé à lire ne te permettra pas de comprendre l’assembleur utilisé par Apollo, parce que ce ne sont pas les mêmes bébêtes en-dessous.
Parmi les cours d’assembleur que tu pourras trouver, il n’y aura grosso modo que trois familles de processeurs.
- L’assembleur MIPS, réputé pour être assez basique, mais qui nécessite un matos pas si courant et largement obsolète pour pouvoir être testé.
- L’assembleur ARM (pour les processeurs qu’on trouve généralement dans les téléphones, tablettes, dans le RPi, ou dans certaines consoles de poche), pour lequel il existe à ma connaissance un unique cours sur Internet, incomplet.
- L’assembleur x86 (pour les processeurs que l’on trouve dans la quasi-totalité des Mac et PC de ces 15 dernières années), qui lui représente la quasi-totalité des cours d’assembleur en ligne et en livres, entre autres parce que c’est le plus facile à tester.
Mais cela ne s’arrête pas là. Coder en assembleur pur, c’est la croix et la bannière, essentiellement à cause des instructions de saut. On utilise donc presque toujours des sur-ensembles de l’assembleur pur, qui aident à programmer plus facilement : il en existe un par logiciel d’assemblage, et pour la famille x86, tu auras ainsi l’assembleur FASM, l’assembleur gas, l’assembleur TASM, MASM, NASM, YASM…
À titre personnel, je préfère la variante NASM, mais c’est une pure affaire de goût.
Enfin, les processeurs évoluant avec le temps, au sein d’une même famille d’assembleur, il en existe plusieurs générations. Par exemple, l’assembleur ARM connaît pas moins de 8 versions à l’heure actuelle, dont seules les versions 4, 6 et 7 sont réellement d’usage courant.
Pour la famille x86, il s’agit du mode réel (ou 16 bits), du mode protégé (ou 32 bits) et du mode long (ou 64 bits). Le mode protégé existe depuis 1986, et on peut considérer que le mode réel est largement obsolète depuis 1995 environ. Pourtant, la très grande majorité des cours d’assembleur x86 que tu trouveras commencent par le mode réel, et bien souvent, ne vont pas plus loin. D’où mon jugement sévère de tout à l’heure…
Il y a une dernière difficulté. Les systèmes d’exploitation ont leur propre format d’exécutables : ELF sous les Unix, PE sous Windows, etc. qui contiennent bien plus de choses que le seul code machine traduit depuis l’assembleur. Et un code machine brut ne fonctionnera généralement pas, surtout s’il est en assembleur 16 bits.