answerstoquestions 3.94 KB
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:1, col:5> col:5 used i 'int'
    |-BinaryOperator 0x2c52a88 <line:7:1, col:3> 'int' '='
    | |-DeclRefExpr 0x2c52a40 <col:1> 'int' lvalue Var 0x2c529d0 'i' 'int'
    | `-IntegerLiteral 0x2c52a68 <col:3> 'int' 0
    |-ForStmt 0x2c53d70 <line:8:1, line:4:41>
    | |-BinaryOperator 0x2c52af8 <line:8:5, col:7> 'int' '='
    | | |-DeclRefExpr 0x2c52ab0 <col:5> 'int' lvalue Var 0x2c529d0 'i' 'int'
    | | `-IntegerLiteral 0x2c52ad8 <col:7> '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 ?



///////////////////////////////////////////////////////////////////////////////////////