Académique Documents
Professionnel Documents
Culture Documents
Dans ce cours, nous utiliserons la syntaxe AT&T pour les compilateur GNU
Étiquettes
# directive on est dans le segment données
.data
val:
.word 10, -14, 30 # trois mots
Valeurs
# on est dans le segment texte (instructions)
Type .text
.global main # main est publique
main:
add %ebx %eax # addition
.data # 0x1000
poly:
.qword 10, 041
mtl:
.short 1, 0xAA
.data # 0x1000
poly: 3 2 1 0
.qword 10, 041 0x1000 0x00 0x00 0x00 0x0A
mtl: 0x1004 0x00 0x00 0x00 0x00
.short 1, 0xAA
0x1008 0x00 0x00 0x00 0x21
0x100C 0x00 0x00 0x00 0x00
0x1010 0x00 0xAA 0x00 0x01
.data # 0x1000
poly:
.qword 10, 041
mtl:
.short 1, 0xAA
.data # 0x1000
poly: # 0x1000
.qword 10, 041 3 2 1 0
mtl: # 0x1010 0x1000 0x00 0x00 0x00 0x0A
.short 1, 0xAA
0x1004 0x00 0x00 0x00 0x00
0x1008 0x00 0x00 0x00 0x21
0x100C 0x00 0x00 0x00 0x00
0x1010 0x00 0xAA 0x00 0x01
a:
.byte 0xAA, 0x22, 0x24, 0x5C, 0x6E
a:
.byte 0xAA, 0x22, 0x24, 0x5C, 0x6E
0x6E5C
fin_data:
.data # 0x1000
.float 1.5
.double 1.5
.data # 0x1000 3 2 1 0
.float 1.5 0x3FC00000
0x1000 0x3F 0xC0 0x00 0x00
.double 1.5 0x3FF8000000000000
0x1004 0x00 0x00 0x00 0x00
0x1008 0x3F 0xF8 0x00 0x00
.data # 0x1000
valeurs:
.int 0, 0, 0, 0, 0, 0, 0, 0
.text
movl $3, %eax
xorl %ebx, %ebx
movl $0x12345678, valeurs(%ebx, %eax, 2)
.data # 0x1000 3 2 1 0
valeurs:
0x1000 0x00 0x00 0x00 0x00
.int 0, 0, 0, 0, 0, 0, 0, 0
.text 0x1004 0x56 0x78 0x00 0x00
movl $3, %eax 0x1008 0x00 0xF8 0x12 0x34
xorl %ebx, %ebx
movl $0x12345678, valeurs(%ebx, %eax, 2)
if( a ) if:
b; # code pour a
else
j? partie_else
c;
# code pour b
jmp fin_du_if
partie_else:
# code pour c
fin_du_if:
do{ boucle:
b; # code de b
} while(a);
# code de a
j? boucle
for(a; b; c) # code de a
d; jmp test_au_debut
boucle:
Équivaut à
# code de d
a;
# code de c
while(b) {
test_au_debut:
d;
c; # code de b
} j? boucle
.text
.globl main
main:
pushl $txt
call printf
addl $4, %esp
ret
.text
Définit une chaine de caractère
.globl main
main:
pushl $txt
call printf
addl $4, %esp
ret
.text
.globl main
main:
pushl $txt
call printf Instructions pour un appel de fonction
addl $4, %esp (voir plus loin Appels de fonctions)
ret
.text
.globl main
main:
pushl $txt
call printf Fonction permettant d’afficher du texte à la console
addl $4, %esp
ret
.text
.globl main
main:
pushl $txt Paramètre de la fonction:
call printf Adresse de la chaine de caractères à afficher
addl $4, %esp
ret
.text
.globl main
main:
pushl $txt
call printf
addl $4, %esp Sert à dépiler 4 octets (voir Concept de pile)
ret Pour retirer le paramètre de la fonction de la pile
main:
movl $3, %ebx
L1:
pushl $txt
call printf
addl $4, %esp
subl $1, %ebx
jnz L1
ret