Bonjour.

Considérons le code C suivant contenu dans un fichier "main.cpp" .

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
int main(){
int a = 5;
a = a + 2;
return 0;
}

Sous Linux Ubutnu, la commande "gcc -S main.cpp" renvoie le code assembleur suivant.

Code Assembleur : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    .file    "main.c"
    .text
.globl main
    .type    main, @function
main:
.LFB0:
    .cfi_startproc
    pushq    %rbp
    .cfi_def_cfa_offset 16
    movq    %rsp, %rbp
    .cfi_offset 6, -16
    .cfi_def_cfa_register 6
    movl    $3, -4(%rbp)
    addl    $2, -4(%rbp)
    movl    $0, %eax
    leave
    ret
    .cfi_endproc
.LFE0:
    .size    main, .-main
    .ident    "GCC: (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

Dans le code précédent, ce qui m'intéresse ce sont les lignes suivantes.

Code Assembleur : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    pushq    %rbp
    .cfi_def_cfa_offset 16
    movq    %rsp, %rbp
    .cfi_offset 6, -16
    .cfi_def_cfa_register 6
    movl    $3, -4(%rbp)
    addl    $2, -4(%rbp)
    movl    $0, %eax
    leave

Quelqu'un pourrait-il m'expliquer un peu ces lignes ? Existe-t-il une documentation expliquant les mots clés ?