Chapitre 5 Adressage des opérandes, boucles, tableaux et pointeurs Jean Privat Université du Québec à Montréal INF2170 Organisation des ordinateurs et assembleur Automne 2013 Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 1 / 23
Plan 1 Boucles et structures de contrôles 2 Adressage des opérandes 3 Adressages calculés et tableaux 4 Adressages indirects et pointeurs 5 Autres adressages Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 2 / 23
Plan 1 Boucles et structures de contrôles 2 Adressage des opérandes 3 Adressages calculés et tableaux 4 Adressages indirects et pointeurs 5 Autres adressages Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 3 / 23
Structures de contrôles Les langages procéduraux (et supérieurs) if(cond) instrs if(cond) instrs else instrs while(cond) instrs do instr while(cond) for(instr ; cond ; instr) instrs opérateurs booléens (and or not &&!) En assembleur BR BRcond Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 4 / 23
Goto vs. programmation structurée Structures de contrôles Pour les humains Pour écrire des algorithmes (et des recettes de cuisine) Gotos Pour les machines Pour écrire des livres dont vous êtres le héros Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 5 / 23
Programmer en assembleur Principe Simuler les structures de contrôles Comment faire Transformer les structures de contrôles en BR et BRcond Éviter d utiliser des BR et BRcond autrement Objectif Le code écrit doit être le plus linéaire possible Éviter le pire (code spaghetti) Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 6 / 23
Exercices Conditions Écrire un programme qui demande (poliment) un nombre ; indique s il est négatif, compris entre 0 et 100 ou plus grand que 100 ; puis dit au revoir. Boucles Écrire un programme qui compte de 1 jusqu à 100 E-S Écrire un programme qui lit un ligne et transforme les a en 4, les e en 3 et les i en 1. Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 7 / 23
Plan 1 Boucles et structures de contrôles 2 Adressage des opérandes 3 Adressages calculés et tableaux 4 Adressages indirects et pointeurs 5 Autres adressages Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 8 / 23
Rappel L assembleur Attribue des adresses relatives : Aux instructions Aux données À l exécution Les adresses réelles (absolues) utilisées peut être différentes des adresses relatives Le chargeur Doit charger le programme quelque part en mémoire Doit se débrouiller pour que le programme fonctionne Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 9 / 23
Modes d adressages Spécificateur d opérande opérande L opérande est la valeur utilisée par l instruction Le spécificateur d opérande est un paramètre de l instruction Mode d adressage Le mode d adressage est un paramètre de l instruction Il explique comment obtenir l opérande à partir du spécificateur Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 10 / 23
Adressage immédiat L opérande telle quelle L opérande est dans l instruction elle même Pas d accès mémoire supplémentaire opérande = spécificateur d opérande Exemples LDA 456,i ; A 456 CHARO *,i ; print( * ) Utilisation Constantes Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 11 / 23
Adressage direct L adresse effective de l opérande L opérande est en mémoire à l adresse effective désignée par le spécificateur Plusieurs octets peuvent être lus ou modifiés opérande = mem[spécificateur] Exemples LDA val,d ; A mem[val] CHARI char,d ; mem[char] <- getchar() ; Utilisations Variables globales Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 12 / 23
Plan 1 Boucles et structures de contrôles 2 Adressage des opérandes 3 Adressages calculés et tableaux 4 Adressages indirects et pointeurs 5 Autres adressages Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 13 / 23
Adressage indexé Une adresse relative de l opérande L adresse effective est calculée à l exécution Le spécificateur désigne une adresse de base Un registre d index indique le décalage opérande = mem[spécificateur + index] Exemples LDX j,d ; X mem[j] LDBYTEA vec,x ; mem[vec + X] (ou "vec[j]" en C) Attention Il faut contrôler la valeur du registre index Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 14 / 23
Adressage basé Une adresse relative de l opérande (bis) Un registre de base indique une adresse Le spécificateur désigne le décalage opérande = mem[base + spécificateur] Exemples Pas d adressage basé en Pep/8 Utilisation Relocation dynamique (chargeur) Astuce : adressage indexé adressage basé Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 15 / 23
Tableaux Tableaux en assembleur Une suite de valeurs en mémoire L adresse du tableau est l adresse de la première case Attention C est au programmeur de gérer la longueur du tableau la taille des éléments du tableau (octets ou mots) Exercice Écrire un programme qui calcule la somme des éléments d un tableau Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 16 / 23
Plan 1 Boucles et structures de contrôles 2 Adressage des opérandes 3 Adressages calculés et tableaux 4 Adressages indirects et pointeurs 5 Autres adressages Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 17 / 23
Adressage indirect L adresse de l adresse L adresse effective de l opérande est à l adresse effective désignée par le spécificateur Il y a donc deux accès mémoire. opérande = mem[mem[spécificateur d opérande]] Exemple LDA dataptr,n ; A mem[mem[dataptr]] Exercices Simuler l adressage indirect avec l adressage indexé Simuler l adressage indexé avec l adressage indirect Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 18 / 23
Pointeurs On manipule une adresse En assembleur, les pointeurs ne sont pas typés En Pep/8 Les adresses sont sur un mot Attention : pointeur en mémoire ou adressage indexé Exercice Écrire un programme qui épelle un mot en utilisant l alphabet phonétique de l OTAN Alpha Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Romeo Quebec Sierra Tango Uniform Victor Whiskey X-ray Yankee Zulu Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 19 / 23
Adressages indirects multiples L adresse de l adresse de l adresse de... On précise le nombre d indirection Un accès en mémoire par niveau d indirection Exemple Pas d indirection multiple en Pep/8 Exercice Simuler une indirection triple en Pep/8 en utilisant que l adressage immédiat et l adressage indexé opérande = mem[mem[mem[mem[spécificateur]]]] Même question en utilisant que des adressages directs et indirects Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 20 / 23
Plan 1 Boucles et structures de contrôles 2 Adressage des opérandes 3 Adressages calculés et tableaux 4 Adressages indirects et pointeurs 5 Autres adressages Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 21 / 23
Adressages sur la pile Les choses sont sur la pile Les adresses sont relatives au pointeur de pile (SP) 4 adressages de plus Direct sur la pile Indirect sur la pile Indexé sur la pile Indirect indexé sur la pile Plus tard Chapitre sur les sous programmes Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 22 / 23
Segmentation et Pagination Mécanismes évolués Architectures modernes Utilisés par les systèmes d exploitation Plus tard Cours INF3172 Principes de systèmes d exploitation Cours INF4170 Architecture des ordinateurs Jean Privat (UQAM) 05 Adressage et boucles INF2170 Automne 2013 23 / 23