1 CHAPITRE 3 L’accès aux données 2 Les mémoires • Toute information est représentée sous forme binaire • Un prix, un texte légal, une image, du son, etc. • Transformée en binaire, on l’appelle des données. • Pour utiliser les données stockées en mémoire secondaire (disque, ruban, etc.) elles doivent passer par le bus • C’est le goulot d’étranglement • Afin d’assurer un accès rapide, on utilise plusieurs unités de stockage. 3 Les mémoires • Registre • Plus rapide, plus couteux, plus petit • Mémoire cache • Jusqu’à dix fois plus rapides que la mémoire principale, plusieurs niveaux • Mémoire centrale (RAM, ROM, VRAM) • Plus volatile • Disque et ruban (disque/SSD/CD, DVD, …) • Permet de garder des données sur une plus longue période • Coût très faible, très grande capacité, très lent • Dois transiter par la mémoire centrale pour être utilisée 4 Les données • Chaque cellule de mémoire peut contenir une donnée binaire • Entier • Nombre virgule flottante • Caractères • Bits et chaînes de bits • Adresses • L’interprétation est laissée au programme qui l’utilise. 5 Les adresses • Chaque cellule de mémoire est désignée par une adresse. • Entier binaire de longueur « n » 2𝑛 cellules 0 à 2𝑛 − 1 • Dans le code d’un programme • Adresse numérique • Adresse symbolique • Adresse effective • Obtenue à partir de transformations sur une adresse initiale • Adresse indexée • Adresse indirecte • Adresse relative • Mémoire virtuelle Adresse virtuelle 6 Vie d’un programme Création (Éditeur de texte) Adresses numériques (rares), Adresses symboliques, Modes d’adressage Traduction (Assembleur) Adresses numériques, Adresses symboliques (rares), Modes d’adressage Programme source Code Objet Librairies statiques Édition des liens (Éditeur de liens) Adresses numériques, Modes d’adressage Module chargeable Chargement (Chargeur) Adresses numériques, Modes d’adressage Processus Exécution (Processeur) Mode d’adressage(Adresses numériques) = Adresse effective Physique Physique Virtuelle Unité de gestion mémoire 7 Modification d’une adresse Module chargeable Code Objet 0 0 c l a Mémoire 0 donnée l a 𝑎+𝑙 donnée a 𝑎+𝑙+𝑐 donnée 8 Mode d’adressage • Adressage immédiat • L’opérande est dans l’instruction Code Op Opérande • Utilisé lorsque la valeur de l’opérande est constante • Valeur généralement petite (RISC) 9 Mode d’adressage • Adressage par registre • L’opérande est dans un registre Code Op Registres Numéro de registre Opérande • Pratique lorsqu’un même opérande est utilisé constamment par une suite d’instruction • L’instruction contient le numéro du registre 10 Mode d’adressage • Adressage direct • L’opérande est en mémoire Code Op Mémoire Adresse Opérande • L’adressage est limité dans une architecture RISC • L’instruction contient l’adresse de l’opérande 11 Mode d’adressage • Adressage indexé • L’opérande est en mémoire Code Op Adresse indexée Mémoire Index + Opérande • L’instruction contient le repère (adresse indexée) et un index • Le repère et l’index peuvent être dans des registres, l’instruction contient alors les numéros de registre 12 Mode d’adressage • Adressage relatif • L’opérande est en mémoire Code Op Instruction Déplacement PC Déplacement Mémoire + Opérande • Le repère est variable (contenu du PC) • Le déplacement est contenu dans l’instruction • C’est l’assembleur qui s’occupe de calculer le déplacement • Très pratique Indépendant de l’emplacement du programme en mémoire 13 Mode d’adressage • Adressage base et déplacement • L’opérande est en mémoire Code Op Registre Mémoire Adresse de base Déplacement Déplacement Registres Adresse de base + Opérande • Le repère (base) est dans un registre • L’instruction donne le numéro de registre • Le déplacement est contenu dans l’instruction 14 Mode d’adressage • Adressage immédiat différé • Équivalent au mode direct Code Op Mémoire Adresse Opérande • Différé Au lieu d’avoir l’opérande, on a l’adresse de l’opérande • L’opérande est donc toujours en mémoire 15 Mode d’adressage • Adressage par registre différé • Le registre contient l’adresse de l’opérande Code Op Mémoire Registre Registres Adresse Opérande 16 Mode d’adressage • Adressage indirect • Adresse qui contient une adresse Code Op Adresse Mémoire Adresse Opérande 17 Mode d’adressage • Adressage indexé différé Mémoire Adresse indexée Code Op Adresse indexée Index Index Adresse + Opérande 18 Mode d’adressage • Adressage relatif différé Mémoire Code Op Instruction Déplacement PC Déplacement + Adresse Opérande 19 Mode d’adressage • Adressage auto-incrément • L’instruction contient un numéro de registre Code Op Mémoire Registre Registres Adresse effective Adresse Opérande +𝑖 • Le registre contient l’adresse de l’opérande • À la fin de l’exécution, la valeur de l’adresse est incrémentée par 𝑖 20 Mode d’adressage • Adressage auto-décrément • On décrémente l’adresse en premier Code Op Mémoire Registre Registres Adresse −𝑖 Adresse effective Opérande • On peut aussi faire les deux derniers modes en différé 21 Mode d’adressage • Adressage indirect à 𝑛 niveaux • L’adresse d’une adresse, d’une adresse… Mémoire Adresse Code Op Adresse Adresse Opérande Adresse 22 Particularités du SPARC • 3 modes d’adressage pour accéder aux données • Mode immédiat • Mode registre • Mode indexé • Adresse indexée est dans un registre • L’index est dans un autre registre, ou dans l’instruction • Mode relatif • Utilisé par les branchements • Aussi pour les appels de sous-programmes 23 Particularités du SPARC • Les instructions sont encodées sur 32 bits • Les registres peuvent contenir des valeurs 64 bits • Les adresses font 64 bits • Comment écrire une adresse de 64 bits dans une instruction longue de 32 bits? 24 Chargement d’une adresse • L’instruction sethi charge la valeur d’une expression dans les bits 10 à 31 d’un registre • Pour mettre une valeur de 64 bits dans un registre, il faut : sethi %hh(n), reg’ ! %hh conserve les bits 42 à 63 or reg’, %hm(n), reg’ ! %hm conserve les bits 32 à 41 sllx reg’, 32, reg’ sethi %lm(n), reg or reg, reg’, reg or reg, %lo(n), reg • 6 instructions! ! %lm conserve les bits 10 à 31 ! %lo conserve les bits 0 à 9 25 Chargement d’une adresse • Exemple : 0xBE400F26FA2 sethi %hh(0xBE400F26FA2), %l1 ! %hh(n) = 0000000000000000000010 00000000000000000000000000000000 32 64 %l1 00000000000000000000100000000000 0 31 or %hm(0xBE400F26FA2), %l1 ! %hm(n) = 1111100100 00000000000000000000000000000000 64 32 %l1 00000000000000000000101111100100 31 0 sllx %l1, 32, %l1 00000000000000000000101111100100 64 32 00000000000000000000000000000000 31 0 %l1 26 Chargement d’une adresse • Exemple : 0xBE400F26FA2 sethi %lm(0xBE400F26FA2), %l0 ! %lm(n) = 0000000011110010011011 00000000000000000000000000000000 32 64 %l0 00000000111100100110110000000000 0 31 or %l0, %l1, %l0 00000000000000000000101111100100 32 64 %l0 00000000111100100110110000000000 0 31 or %l0, %lo(0xBE400F26FA2), %l0 ! %lo(n) = 1110100010 00000000000000000000101111100100 64 32 00000000111100100110111110100010 31 0 %l0 27 Chargement d’une adresse • L’instruction setx remplace les 6 instructions • Ne jamais la mettre dans la fente de temporisation! setx n, %l7, %l0 Adresse symbolique Registre temporaire Registre destination • Les données contenues dans le registre temporaire sont perdues après un setx 28 Instructions de chargement ldub Charge un octet non signé dans un registre. Mets les 56 bits de poids fort à 0 ldsb Charge un octet signé dans un registre. Si la valeur est positive, met des 0 dans les 56 bits de poids fort, sinon, met 1. lduh Charge un demi-mot non signé dans un registre. Mets les 48 bits de poids fort à 0. ldsh Charge un demi-mot signé dans un registre. Si la valeur est positive, met des 0 dans les 48 bits de poids fort, sinon, met 1. lduw Charge un mot non signé dans un registre. Mets les 32 bits de poids fort à 0. ldsw Charge un mot signé dans un registre. Si la valeur est positive, met des 0 dans les 32 bits de poids fort, sinon, met 1. ldx Charge un mot étendu dans un registre. 29 Instructions de stockage stb Copie les 8 bits de poids faible du registre dans la mémoire sth Copie les 16 bits de poids faible du registre dans la mémoire stw Copie les 32 bits de poids faible du registre dans la mémoire stx Copie les 64 bits du registre dans la mémoire 30 Instructions synthétiques • Remise à zéro d’une cellule mémoire clrb [%l0] == stb %g0, [%l0] clrh [%l0] == sth %g0, [%l0] clr [%l0] == stw %g0, [%l0] clrd [%l0] == stx %g0, [%l0] • Transfert d’un registre vers un registre mov %l1, %l4 == or or %g0, %l1, %l4 %l1, %g0, %l4 • Remise à zéro d’un registre clr %l1 == mov or %g0, %l1 %g0, %g0, %l1 31 Instructions synthétiques • Mettre une valeur dans un registre • Si la valeur est plus petite que 213 mov 518, %l6 == or %g0, 518, %l6 • Si la valeur est plus grande que 213 setx 234567890, %l7, %l0 == suite de 6 instructions