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)