Exemple de transformation d’un programme écrit en C ou en langage Assembleur.

Après compilation, calcul du nombre de cycle nécessaire pour exécuter une instruction.

 

                     En langage C                              ou                        En langage Assembleur IBM 360

                             Int a = 4;                                                             A = 4

                             Int b =6;                                                              B = 6

                             Int c = 0;                                                             C = 0

                              c=a+b  ;                                                             C = A + B

 

Après compilation (transformation du programme C en programme *.Exe ou  *.com  directement exécutable par la machine.

 

On va analyser les instructions générées en langage machines qui sont nécessaires pour remplacer l’instruction c=a+b  en langage Assembleur IBM 360.

 

Si on considère que les 3 premières instructions ont déjà été effectuées.

Elles ont mise par exemple en mémoire :

Position mémoire 200 la valeur 4

et écrit 200 dans le registre 3

                Position mémoire 204 la valeur 6

et écrit 204 dans le registre 4

                Position mémoire 208 la valeur 0

et écrit 208 dans le registre 5

 

Compilation de l’instruction c = a + b

L 1,0(3)                Chargement  dans le registre 1 de la valeur qui en en mémoire  en position  200.

L 2,0(4)                Chargement dans le registre 2 de la valeur en 204

AR 1,2                   Additionne le registre 1 et le registre 2 et met le résultat dans le registre 1

ST 1,0(5)              Store en mémoire la valeur du registre 1 à l’adresse indiquée dans le registre 5.

 

Calcul approximatif du nombre de cycle d’horloge pour exécuter ces 4 instructions sur un modèle IBM 360 type 40.

(Dans une mémoire à ferrite la lecture doit être suivit d’une réécriture soit 2 temps de clock.)

 

 

 

 

Première instruction : L 1,(0)3

On considère que le programme commence en ligne 100 instruction : 58103000

 

L 1,0(3)                Instruction de 4 bytes de long à code machine : 58103000

On charge 4 bytes de la position 200 dans le registre 1

Calcul du nombre de cycle :

Chargement de l’instruction en (100)                    Nb de cycles       3

Décode                                                                               Nb de cycle         1            

Exécute                                                                               Nb de cycle         1

                              

L 2,0(4)

On charge 4 bytes de la position 204 dans le registre 2

Calcul du nombre de cycle :

Chargement de l’instruction                                      Nb de cycles       3

Décode                                                                               Nb de cycle         1            

Exécute                                                                               Nb de cycle         1

 

  AR 1,2   (c’est une instruction qui fait 2 bytes de longueur)

On additionne le registre 1 et 2 et le résultat en mis dans le registre 1

Calcul du nombre de cycle :

Chargement de l’instruction                                      Nb de cycles       1 ou 2

Décode                                                                               Nb de cycle         1            

Exécute                                                                               Nb de cycle         1

               

ST 1,0(5)  (c’est une instruction de 4 bytes de longueur)

On met le résultat de l’addition en position 208 de la mémoire.

Calcul du nombre de cycle :

Chargement de l’instruction                                      Nb de cycles       3

Décode                                                                               Nb de cycle         1            

Exécute                                                                               Nb de cycle         1

 

 

On s’aperçoit qu’il faut environs de 18 à 20 cycles machine (temps de clock) pour exécuter une simple instruction de type :

 c = a +b

 

Sur un model 360/30 il faudrait plus 30 instructions car après la lecture du premier byte en mémoire il faut le re-écrire avant de lire le second byte. (Donc pour lire une instruction de 4 bytes il faut 7 ou 8 temps de clock machine)