Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie de son cours d’introduction à l’information, à la communication, et au calcul. Il s’inscrit dans le 3e module de ce cours qui porte sur le fonctionnement et la sécurité des systèmes informatiques.
Des algorithmes aux ordinateurs: Etape 3 Comme annoncé dans le videoclip d’introduction de cette leçon, la 3e étape nécessaire pour comprendre comment un ordinateur peut exécuter un algorithme consiste à voir comment un programme en langage assembleur peut être encodé en une suite binaire lisible par un ordinateur. C’est le but du présent clip. Logiciel Matériel
Comment encoder les instructions ? 1: charge r3, 0 2: cont_ppe r1, 0, 6 3: somme r3, r3, r1 4: somme r1, r1, -1 5: continue 2 6: charge r2, r3 Mémoire pour les instructions Ligne Instruction Cette étape est en somme fort simple. 1 Il suffit en effet d’imaginer un encodage binaire quelconque comprenant: Quelques bits pour identifier l’instruction à exécuter – avec 8 bits on peut déjà encoder 256 instructions différentes, ce qui est amplement suffisant pour la plupart des ordinateurs. Avec 4 bits supplémentaires on peut identifier 16 registres différents, ce qui est aussi typique de beaucoup d’ordinateurs. Avec 12 bits on peut donc désigner 2 registres d’opérandes et un registre de résultat. Et ainsi de suite … 2 Donc avec un total de 32, voire 64 bits, on peut encoder toutes les instructions et identifier tous les registres nécessaires à chacune d’elles, exactement comme on peut encoder un large spectre de nombres binaires. 3 Ainsi l’instruction somme r3, r3, r1, p.ex. peut être encodée comme: 00010010 pour désigner une somme, 0011, 0011, et 0001 pour désigner les 3 registres visés, et le reste de 32 ou 64 bits ne sont même pas nécessaire dans ce cas. (En pratique ils pourraient servir à encoder une opérande numérique au lieu d’identifier un des registres comme opérande.) Selon cette convention la chaine de bits valant l’entier décimal 305’336’320 est donc une représentation de l’instruction somme r3, r3, r1. On peut inventer un encodage simple : Quelques bits pour identifier l’opération (avec 8 bits on peut désigner 256 opérations différentes) Quelques bits pour identifier les registres (avec 4 bits on peut désigner 16 registres différents, donc avec 12 bits on peut désigner 2 registres d’opérandes et 1 registre de destination) Et ainsi de suite pour le reste… Donc on peut s’en sortir avec 32 ou 64 bits, comme pour encoder un nombre entier typique somme r3, r3, r1 inutilisé? 00010010 0011 0011 0001 000000000000 La valeur 305’336’320 représente l’instruction somme r3, r3, r1
Encoder les instructions somme des premiers n entiers entrée : r1 sortie : r2 1: charge r3, 0 2: cont_ppe r1, 0, 6 3: somme r3, r3, r1 4: somme r1, r1, -1 5: continue 2 6: charge r2, r3 somme des premiers n entiers entrée : r1 sortie : r2 1: 01000100001100000000 2: 01011000000100000110 3: 00010010001100110001 4: 00010010000100011111 5: 00011001000000000010 6: 01000100001000110000 Notre algorithme d’addition des N premiers nombres entiers déjà vu dans plusieurs clips précédents, peut ainsi être traduit de langage assembleur en binaire et chargé dans un ordinateur tel qu’illustré ici. Langage assembleur Langage machine en binaire