Chapitre 7: Rangement mémoire Jeu d`instruction
Transcription
Chapitre 7: Rangement mémoire Jeu d`instruction
2/15 Les étiquettes Chapitre 7: Rangement mémoire Jeu d'instruction > Pour programmes assembleur (pas langage machine) ; > chaîne de caractère remplacée à l'assemblage par valeur constante (assemblage en deux passes) ; > Par défaut : étiquette implicite sur ligne suivante. _main: READ _A _boucle:LOAD _A SUBI 01 TSTN _end STOR _A WRIT _A _boucle _end: EJECT 0 _A: 123456 M. Dubacq IUT de Villetanneuse 2008 2009 3/15 Conventions en VLTN // // // // // // // // 00: 01: 02: 03: 04: 05: 06: 07: READ 07 LOAD 07 SUBI 01 TSTN 06 STOR 07 WRIT 07 000000 123456 01 02 03 04 05 01 La taille d'un processeur 4/15 > Les étiquettes commencent toutes par ; > Di érentes tailles d'éléments en bits ; > Les étiquettes de données commencent par une majuscule ; > taille d'un mot-machine (registre entier) ; > main est déjà a ectée à 00 ; > taille d'une adresse (PC, pointeur) ; > Les commentaires sont toujours introduits par // ; > taille d'un transfert entre RAM et processeur (motmémoire) ; > Les étiquettes n'ont pas d'accents (comportement indéterminé). > taille d'une instruction (registre d'instruction) ; > Potentiellement tous di érents, souvent identiques ; > Plus important : mot-machine. Les registres 5/15 > Un processeur compte des registres généraux (entiers) ; > Taille = taille d'un mot machine = taille (générale) ; > Taille des adresses parfois di érente mais toujours dans registre entier ; > Souvent aussi des registres spécialisés ( ottants double) ; > jeu d'instructions spécialisées (x87, SSE) ; > autres registres ; > Espace adressable = 2taille des adresses ; > Taille = 4 Gio en 32 bits, 16 Eio en 64 bits ; > Adresse contenue dans registre entier. Mots, demi-mots, octets 7/15 > Une opération sur un mot (un entier) doit se faire avec une adresse multiple de 4 ; > Sinon, erreur dite d'alignement ; > Il est possible de mettre dans un registre moins qu'un mot ; > Pour les demi-mots (16 bits), c'est LoadHalf et StoreHalf ; > Les adresses doivent alors être paires ; > Pour les octets (8 bits), c'est LoadByte et StoreByte ; > Les adresses peuvent être n'importe quoi ; > Attention au signe. Si l'octet vaut 200, registre négatif ; > LoadByteUnsigned pour caractères de code >128. 6/15 Grand et petit-boutien (little/big-endian) > Adresse 0x00000000, valeur 0x4A3B2C1D ? > Plusieurs représentations possibles : Contenu 0x4A 0x3B 0x2C 0x1D > : petit-boutien Adresse 0x03 0x02 0x01 0x00 (little endian) ; Contenu 0x1D 0x2C 0x3B 0x4A : grand-boutien > Adresse 0x03 0x02 0x01 0x00 (big endian) ; > little-endian : 6502, x86, VAX ; > big-endian : Motorola 68000, SPARC, System/370 ; > bi-endian : ARM, PowerPC (sauf G5), MIPS ; > Les bi-boutiens ont un mode par défaut (big-endian pour PowerPC, little-endian pour IA-64). 8/15 L'alignement dans le segment de données > Chaque donnée prend la taille nécessaire ; > .word (en MIPS) introduit des données sur des adresses multiples de la taille des registres entiers, soit 4 octets ; > .half (en MIPS) introduit des données sur des adresses multiples de la taille des registres entiers, soit 2 octets ; > .byte ou .ascii (en MIPS) introduit des données octet par octet, ainsi que .space ; > Mode d'alignement automatique des données : espace interstitiel ; > Possibilité de le faire manuellement par .align 4 ou .align 2. 9/15 Différences 32/64 bits > En 1985, 32 bits introduit car su isant pour numérotation BD ; 6 > 4 Gio était 10 fois la mémoire typique ; > Maintenant, processeurs 64 bits augmente les données et l'adressage ; > Instructions de taille double ; > Alignement sur taille 8 octets ; > Perte d'espace mémoire ; > Traitement plus rapide pour calcul massif. 11/15 De l'assembleur au code machine Les modèles de programmation 64 bits 10/15 Besoin de garder la compatibilité des codes sources. En C et en C++ les types changent de taille. Taille Taille Taille Taille Exemples Modèle int long adresse long de long Compilateurs 32 bits 32 32 32 64 LP64 32 64 64 64 Tous sauf... ILP64 64 64 64 64 Exceptions... LLP64 32 32 64 64 Microsoft... Les pseudos-instructions 12/15 > Opération d'assemblage faite par le programme assembleur ; > Instructions d'assembleur, pas de langage machine ; > Transformation de mnémoniques en code binaire ; > Transformation en instructions natives ; > Réécriture des pseudos-instructions ; > Utilisation du format d'instruction ; > Exemple : SET 123456 se traduit en SET 56 ;SETM 34 ;SETL 12. > Transformation des étiquettes en adresses ; > Utilisation parfois de registres spéci ques ; > Incorporation des constantes et numéros registres aux instructions ; > Décomposition dépend parfois des valeurs constantes ; > Production de code binaire. > Remplacement automatique, mécanique. > Opposées aux instructions natives ; > Exemple : constante petite (0 99) ou grande ; 13/15 Exemple de format d'instruction : MIPS32 Exemple de format d'instruction : 486 Type Type R 31 26 21 16 11 6 0 op rs rt rd imm5 funct add, sub... 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Type I op rs rt imm ori, lw... 6 bits 5 bits 5 bits 16 bits Type J op target address j, jal... 6 bits 26 bits > Type R : beaucoup de registres, petites constantes (pour décalages), funct sert à compléter op ; > Taille d'instruction variable ; > Type I : Une constante sur 16 bits ; > Caractéristique d'une architecture CISC ; > Type J : une grande constante sur 26 bits divisée par 4. > Taille maximale : 16 octets. Pénurie de codes op 15/15 > Le code op prend une partie de l'instruction ; > Instructions peuvent être compliquées ; > Nécessité de mettre des constantes de la taille des instructions ; > En CISC : instructions permettant d'incrémenter tout en tableau, de comparer deux chaînes ; > Instructions de longueur variable ! > En RISC : instructions élémentaires ; > Transformation d'une instruction (pseudo-instruction) qui est pratique en une (ou plusieurs) instruction existante. 14/15