2.1) Chaine de compilation 1/5 1) les exe ont été créés et envoyés sur le depot lab 2) il n'est pas très propre car on initialise i à 0 et ensuite à 1 3) pensez-vous qu'il nécessaire d'optimiser le code ? Du moins, enlever l'initialisation de i à 0 après optimisation la taille est diminuée -rw-r--r-- 1 pcwik apima3 572 Mar 18 15:27 compil1.c.011t.cfg -rw-r--r-- 1 pcwik apima3 2051 Mar 18 15:27 compil1.c.011t.cfg.dot -rw-r--r-- 1 pcwik apima3 309 Mar 18 15:42 compil1.c.169t.optimized -rw-r--r-- 1 pcwik apima3 1605 Mar 18 15:42 compil1.c.169t.optimized.dot ////////////////////////////////////////////////////////////////////////////////////////// Chaine de compilation 2/5 ////////////////////////////////////////////////////////////////////////////////////////// gcc : @3 var_decl name: @6 type: @7 scpe: @8 @6 identifier_node strg: i lngt: 1 @11 modify_expr type: @7 op 0: @3 op 1: @28 @12 modify_expr type: @7 op 0: @3 op 1: @29 ci-dessus les deux lignes où i est mis à 0 puis à 1 et avec clang : VarDecl 0x2c529d0 col:5 used i 'int' |-BinaryOperator 0x2c52a88 'int' '=' | |-DeclRefExpr 0x2c52a40 'int' lvalue Var 0x2c529d0 'i' 'int' | `-IntegerLiteral 0x2c52a68 'int' 0 |-ForStmt 0x2c53d70 | |-BinaryOperator 0x2c52af8 'int' '=' | | |-DeclRefExpr 0x2c52ab0 'int' lvalue Var 0x2c529d0 'i' 'int' | | `-IntegerLiteral 0x2c52ad8 'int' 1 //////////////////////////////////////////////////////////////////////////////////////////// Chaine de compilation 3/5 ) //////////////////////////////////////////////////////////////////////////////////////////////////// dans quel segment mémoire se trouve la variable i ? Elle se trouve dans la pile (virtual-stack-vars) à quelle adresse se trouve la variable i ? La variable i se trouve à l'adresse contenue dans le registre 54 moins 4 octets. (insn 5 4 6 3 (set (mem/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) (const_int -4 [0xfffffffffffffffc])) [0 i+0 S4 A32]) listez les instructions implantant l'instruction for : mise à 1 de i : instruction 6 (insn 6 5 7 3 (set (mem/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) (const_int -4 [0xfffffffffffffffc])) [0 i+0 S4 A32]) (const_int 1 [0x1])) prog-cpp.c:5 -1 (nil)) l'incrementation de 1 : instruction 15 (insn 15 14 16 4 (parallel [ (set (mem/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) (const_int -4 [0xfffffffffffffffc])) [0 i+0 S4 A32]) (plus:SI (mem/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) (const_int -4 [0xfffffffffffffffc])) [0 i+0 S4 A32]) (const_int 1 [0x1]))) (clobber (reg:CC 17 flags)) ]) prog-cpp.c:5 -1 (nil)) la comparaison avec 10 : instruction 19 (insn 19 17 20 5 (set (reg:CCGC 17 flags) (compare:CCGC (mem/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) (const_int -4 [0xfffffffffffffffc])) [0 i+0 S4 A32]) (const_int 10 [0xa]))) prog-cpp.c:5 -1 (nil)) le jump : instruction 20 (jump_insn 20 19 21 5 (set (pc) (if_then_else (le (reg:CCGC 17 flags) (const_int 0 [0])) (label_ref 18) (pc))) prog-cpp.c:5 -1 (nil) il jump à 18 que l'on retrouve au dessus (code_label 18 8 9 4 3 "" [1 uses]) quels sont les registres utilisés pour le for ? les registres 54 (i) et 17 (insn 19 17 20 5 (set (reg:CCGC 17 flags) (compare:CCGC (mem/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) Comment est stocké le format du printf ? ?pas bien compris la question? le printf est stocké dans une fonction à l'adresse 0xb7242f00 ? ///////////////////////////////////////////////////////////////////////////////////////