Introduction à l'Assembleur GNU sous un système GNU/Linux sur Intel 80386, par Issam Abdallah
Introduction à l'Assembleur GNU
Sous un système GNU/Linux sur Intel 80386
L'assembleur est un langage dit bas niveau, c'est-à-dire qu'il est très proche du langage machine.
Autrement dit, pour programmer en assembleur vous devez :- apprendre une architecture : Intel par exemple ;
- avoir quelques connaissances basiques sur les systèmes d'exploitation : Linux par exemple ;
- maîtriser un assembleur : l'assembleur GNU par exemple.
Apprendre une architecture, c'est comprendre le fonctionnement d'un processeur : les registres, l'adressage et l'organisation de la mémoire, les interruptions… et tout ce que vous avez appris dans le cours d'architecture des ordinateurs. Vous avez, sans doute, une idée claire et suffisante sur l'architecture Intel (IA ou x86) pour aborder ce tutoriel. D'autre part, apprendre un assembleur c'est apprendre une syntaxe pour programmer. C'est l'objectif de ce tutoriel !
Un langage assembleur, ou simplement un assembleur, est une représentation symbolique du langage machine (données binaires et instructions du processeur). Il existe deux styles d'assembleurs :- l'assembleur Intel : l'assembleur principal utilisant ce style est NASM ;
- l'assembleur AT&T : l'assembleur principal est l'assembleur GNU ou simplement as.
Dans ce tutoriel, Issam Abdallah va vous donner la description minimale pour coder en assembleur GNU sous un système GNU/Linux en utilisant le jeu d'instructions Intel 80386.
:fleche: http://asm.developpez.com/cours/gas/
Qu'en pensez-vous ?
Probleme d'affichage de chaine de caractere
Bonjours,
j'ai un problème avec mon programme, je sais pas si je peux le poster ici mais je suis le tuto et j'essaye d'afficher un autre message a la suite du premier "hello world" cependant il affiche le message deux fois de suite.
Ainsi j'ai en sortit:
Hello world!
Loading system...
Loading system...
Voici le programme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
.data
$msg_ : .asciz "Hello, World !\n"
$bootmsg : .asciz "Loading system...\n"
len1 = . - $msg_
len2 = . - $bootmsg
.text
.global main
main :
movl $$msg_,%ecx
movl $len1,%edx
movl $1,%ebx
movl $4,%eax
int $0x80
movl $$bootmsg,%ecx
movl $len2,%edx
movl $1,%ebx
movl $4,%eax ; int $0x80 |
Je vois pas du tout l'erreur de plus le .saut : byte '\n ne s'affichait pas j'ai donc rajouter le \n directement au message et retirer le .saut.
Merci d'avance