Les modes d'adressage sont un aspect de l'architecture des processeurs et de leurs jeux d'instructions. Les modes d'adressage définis dans une architecture régissent la façon dont les instructions en langage machine identifient leurs opérandes. Un mode d'adressage spécifie la façon dont est calculée l'adresse mémoire effective d'un opérande à partir de valeurs contenues dans des registres et de constantes contenues dans l'instruction ou ailleurs dans la machine.
L'adresse de la prochaine instruction à exécuter est contenue dans un registre spécial du processeur, appelé compteur ordinal (souvent noté IP, initiales de l'anglais instruction pointer) ou compteur de programme. Les instructions de branchement (ou de saut) visent à modifier la valeur du compteur ordinal. Cette valeur est l'adresse effective de l'instruction de branchement ; elle est calculée différemment selon le mode d'adressage choisi.
Adressage absolu
En adressage absolu, l'adresse de destination est donnée dans l'instruction ; on peut donc se rendre n'importe où dans la mémoire (programme). Au moment du branchement, le contenu du pointeur de programme est remplacé par l'adresse en question (si le branchement concerne un sous-programme, on sauvegarde le contenu du pointeur de programme).
Adressage relatif
Comme de nombreux branchements s'effectuent vers des adresses mémoire proches de l'endroit où l'on se trouve au moment d'exécuter le branchement, on peut se contenter d'indiquer un décalage par rapport à l'adresse de la prochaine instruction. Par exemple si l'on exécute du code à l'adresse 0x42 et que l'on veut brancher 8 octets plus loin, on peut simplement indiquer +8 pour brancher à 0x4A au lieu d'indiquer cette adresse complète.
Ce mode d'adressage a deux avantages comparé au mode d'adressage absolu. Premièrement, il diminue la quantité de mémoire utilisée par le programme. Cela vient du fait que le décalage prend beaucoup moins de bits qu'une adresse.
Ensuite, ces branchements facilitent l'implémentation de programmes relocalisables, qui peuvent être placés n'importe où en mémoire. C'est une fonctionnalité utilisée pour les bibliothèques dynamiques, qui peuvent être chargées par plusieurs processus à des emplacements différents de leur mémoire : le code n'a pas besoin d'être modifié pour s'adapter à des adresses différentes si les branchements sont relatifs, et peut donc être partagé.
Adressage indirect
Dans certains cas, l'adresse à laquelle brancher n'est pas connue à la compilation, ou alors celle-ci peut varier selon les circonstances. Cela arrive lorsqu'un programme utilise des pointeurs sur fonction, ou lors de l’utilisation de certains fonctionnalités d'un langage (RTTI, Dynamic Dispatch, etc). Auparavant, on réglait ce genre de situation via du code auto-modifiant. Mais de nos jours, certains processeurs ont réglé ce problème en incorporant un mode d'adressage indirect pour le code.
Avec ce mode d'adressage, l'adresse vers laquelle brancher est stockée dans un registre. Le nom du registre en question est alors incorporé dans la représentation binaire de l'instruction.
Certaines opérations ne peuvent être réalisées que sur une donnée se trouvant en un endroit bien précis du processeur (par exemple, l'accumulateur ou la pile). Dans ce cas, il n'est pas nécessaire de spécifier l'adresse du registre en question et on parle d'adressage implicite.
Adressage immédiat
C'est un peu un abus de langage que de parler d'adressage dans ce cas-ci. En effet, la donnée est intégrée directement dans la représentation binaire de l'instruction. Ce mode d'adressage permet d'optimiser la gestion des constantes connues à la compilation.
Généralement, les processeurs utilisant ce mode d'adressage utilisent une dizaine de bits pour encoder des opérandes. Diverses études, effectuées par Andrew Tanenbaum, ont montré qu'une grande partie (entre 75 et 90 %) des constantes numériques d'un programme pouvaient tenir sur 14 à 13 bits. Utiliser plus de bits serait donc inutile.
Ce mode d'adressage est utilisé pour des constantes numériques entières. Ce mode d'adressage est rarement utilisé pour des constantes flottantes, en raison de leur grande taille : 32 à 64 bits sur de nombreux processeurs.
Adressage direct
Dans ce mode d'adressage, on donne l'adresse de la donnée en mémoire (RAM, ROM ou port d'E/S s'il est intégré à la mémoire). Ce mode d'adressage permet d'indiquer n'importe quel endroit dans la mémoire, le prix à payer étant que l'on doit spécifier l'adresse concernée dans son intégralité.
Ce mode d'adressage permet parfois de lire ou d'écrire une donnée directement depuis la mémoire sans devoir la copier dans un registre.
De nos jours, ce mode d'adressage ne sert que pour les données dont l'adresse est fixée une bonne fois pour toutes. Les seules données qui respectent cette condition sont les données placées dans la mémoire statique. Pour les programmeurs, cela correspond aux variables globales et aux variables statiques, ainsi qu'à certaines constantes (les chaines de caractères constantes, par exemple).
Autrefois, ce mode d'adressage servait pour toutes les adresses mémoire, y compris celles qui pouvaient varier, comme les adresses utilisées pour manipuler des tableaux. On devait alors utiliser du code auto-modifiant pour faire varier les adresses encodées avec l'adressage direct.
Adressage registre ou inhérent
Le processeur dispose d'un certain nombre de registres de travail. Ces registres servent à stocker des données, pour qu'elles puissent servir d'opérandes pour nos instructions machines. De nombreuses instructions y font référence.
Pour sélectionner un registre parmi tous les autres, ceux-ci se voient attribuer un numéro, un identifiant, qu'on appelle un nom de registre. Vu le nombre peu élevé de registres d'un processeur (8, par exemple), il suffit d'un petit nombre de bits pour spécifier cet identifiant directement dans l'instruction manipulant ce registre. On parle dans ce cas d'adressage registre ou inhérent.
Le nombre de bits utilisés pour encoder nos registres dépend fortement du nombre de registres, mais aussi de la spécialisation de ces mêmes registres. Sur certains processeurs, les registres sont regroupés en grands ensembles bien séparés. Par exemple, on peut avoir des registres flottants séparés des registres généraux. Et il se peut que les instructions soient cantonnées à un ensemble de registres : par exemple, on aura des instructions séparées pour les registres flottants et d'autres pour les entiers. Dans ce cas, les identifiants sont spécifiques à un ensemble de registres. Ainsi, un registre flottant pourra réutiliser le même identifiant qu'un registre entier : c'est l'instruction utilisée qui sélectionnera implicitement le bon ensemble de registres.
Ce mode d'adressage n'est pas présent sur toutes les architectures : les processeurs basés sur la pile, et certains processeurs à accumulateurs s'en passent.
Adressage indirect à registre
Dans ce mode d'adressage, l'adresse de la donnée se trouve dans un registre du processeur. Ce mode d'adressage permet de préciser dans quel registre se trouve l'adresse de la donnée à accéder. On retrouve donc un nom de registre dans notre instruction, mais celui-ci ne sera pas interprété de la même manière que dans le mode d'adressage inhérent.
Le mode d'adressage indirect à registre permet d'implémenter de façon simple ce qu'on appelle les pointeurs. Au début de l'informatique, les processeurs ne possédaient pas d'instructions ou de modes d'adressage pour gérer les pointeurs. On pouvait quand même gérer ceux-ci, en utilisant l'adressage direct. Mais dans certains cas, cela forçait l'utilisation de self-modifying code, c'est-à-dire que le programme devait contenir des instructions qui devaient modifier certaines instructions avant de les exécuter ! En clair, le programme devait se modifier tout seul pour faire ce qu'il fallait. L'invention de ce mode d'adressage a permis de faciliter le tout : plus besoin de self-modifying code.
Adressage indirect à registre avec incrément ou décrément
Le mode d'adressage indirect à registre existe aussi avec une variante : l'instruction peut automatiquement augmenter ou diminuer le contenu du registre d'une valeur fixe.
Cela permet de faciliter l'implémentation des parcours de tableaux. Il n'est pas rare qu'un programmeur ait besoin de traiter tous les éléments d'un tableau. Pour cela, il utilise une suite d'instructions qu'il répète sur tous les éléments : il commence par traiter le premier, passe au suivant, et continue ainsi de suite jusqu’au dernier. À chaque étape, l'adresse de l’élément à accéder est augmentée ou diminuée d'une valeur fixe. Ce mode d'adressage permet d'effectuer cette incrémentation ou décrémentation automatiquement.
Adressage indexé absolu
Ce mode d'adressage cherche à faciliter l'utilisation des tableaux en assembleur. Un tableau est un ensemble de données de même taille, placées les unes à côté des autres en mémoire. Pour accéder à un élément d'un tableau, le programmeur doit obligatoirement calculer son adresse et effectuer une lecture/écriture. Grâce au mode d'adressage indexé absolu, ces deux opérations peuvent être effectuées par une seule instruction.
Le calcul d'adresse est assez simple : elle vaut , en posant :
L la longueur d'un élément du tableau ;
i l'indice de cet élément ;
et A l'adresse de début du tableau (l'adresse de l’élément d'indice zéro).
Notre mode d'adressage utilise ces données pour calculer l'adresse de l’élément voulu avant de le lire ou de l'écrire.
Adressage Base + Index
Le mode d'adressage indexé absolu ne fonctionne que pour les tableaux dont l'adresse de base est fixée une fois pour toutes. Or, dans la majorité des cas, les tableaux sont alloués via l'allocation dynamique et ont une adresse de base qui n'est pas connue à la compilation. Celle-ci change donc à chaque exécution, rendant l'adressage indexé absolu assez difficile à utiliser.
Pour contourner les limitations du mode d'adressage indexé absolu, on a inventé le mode d'adressage Base plus index. Avec ce dernier, l'adresse du début du tableau n'est pas stockée dans l'instruction elle-même, mais dans un registre. Elle peut donc varier autant qu'on veut.
Ce mode d'adressage spécifie deux registres dans sa partie variable : un registre qui contient l'adresse de départ du tableau en mémoire : le registre de base ; et un qui contient l'indice : le registre d'index.
Adressage Base + Offset
Le mode d'adressage Base + Offset a été inventé pour gérer les structures de façon plus efficace. Ces structures sont des rassemblements de données élémentaires, manipulables par le processeur, comme des pointeurs, des entiers, des flottants, etc. Ces données sont placées les unes après les autres en mémoire.
Pour sélectionner une donnée dans une structure, le processeur doit calculer son adresse. Vu que cette donnée a toujours une place bien précise dans la structure, on peut repérer celle-ci à partir de l'adresse de début de notre structure : il suffit de rajouter le nombre de bytes, dit décalage ou offset, qui séparent notre donnée du début de la structure.
Cette addition entre l'adresse de base et ce nombre de bytes est effectué automatiquement avec l'adressage Base + Offset. L'adresse et le décalage sont stockés dans deux registres.
Modes d'adressage spécialisés pour les digital signal processors
Certains processeurs spécialisés dans le traitement de signal supportent des modes d'adressage spécialisés, afin d'accélérer des traitements et des calculs qu'on trouve couramment dans le traitement de signal. La gestion de files ou les calculs de FFT peuvent ainsi être accélérés par l'utilisation de ces modes d'adressage spécialisés. Deux de ces modes d'adressage sont couramment présents dans les processeurs de traitement de signal (les DSP) : l'adressage modulo et l'adressage bit-reverse.
Adressage Modulo
Les DSPs implémentent des modes d'adressage servant à faciliter l’utilisation de files, des structures de données spéciales, utilisées occasionnellement par les programmeurs de DSP. Ces structures sont des zones de mémoire dans lesquelles on stocke des données dans un certain ordre. On peut y ajouter de nouvelles données, et en retirer. Quand on retire une donnée, c'est la donnée la plus ancienne qui quitte la file.
Ces files sont implémentées avec un tableau, auquel on ajoute deux adresses mémoires : une pour indiquer le début de la file, et l'autre la fin. Le début de la file correspond à l'endroit en mémoire où l'on va insérer les nouvelles données. La fin de la file correspond à la position de la donnée la plus ancienne en mémoire.
À chaque ajout de donnée, l'adresse de la donnée la plus récente est augmentée de la taille de la donnée, afin de réserver la place pour la donnée à ajouter. De même, lors d'une suppression, le pointeur de la donnée la plus ancienne est aussi augmenté, afin de libérer la place qu'il occupait.
Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la 5e), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits ont libéré de la place. L'insertion des données reprend au tout début du tableau.
Ce mode de fonctionnement nécessite de vérifier à chaque insertion si l'on a atteint la fin du tableau, avec l'aide d'une comparaison entre adresses De plus, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau.
Le mode d'adressage modulo a été inventé pour supprimer la comparaison et la gestion logicielle des débordements. Avec ce mode d'adressage, les deux adresses sont adressées en utilisant le mode d'adressage indirect à registre post ou pré-indexé : l'incrémentation de l'adresse au retrait ou à l'ajout est effectué automatiquement. Ce mode d'adressage vérifie automatiquement que l'adresse ne déborde pas du tableau lors d'une insertion. Si cette adresse "déborde", le processeur la fait pointer au début du tableau. Suivant le DSP, ce mode d'adressage est géré plus ou moins différemment.
La première méthode utilise des registres modulos. Ces registres vont stocker la taille du tableau servant à implémenter notre file. Chacun de ces registres est associé à un registre d'adresse : si jamais on utilise l'adressage modulo dans ce registre d'adresse, le processeur utilisera le contenu du registre modulo pour faire ce qu'il faut. Pour gérer l'adresse de début, le processeur va imposer quelques contraintes sur l'adresse de départ de ce tableau. Cette adresse est souvent alignée à des adresses bien précises, souvent un multiple de 64, 128, ou 256. L'adresse de début de la file est donc le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée.
Autre solution : utiliser deux registres : un pour stocker l'adresse de début du tableau, et un autre pour sa longueur. Certains processeurs DSP utilisent un registre pour stocker l'adresse de début, et un autre pour l'adresse de fin.
Adressage bit-reverse
Le mode d'adressage bit-reverse sert à accélérer les calculs de transformées de Fourier rapides. Ces algorithmes vont prendre des données, stockées dans un tableau, et fournir des résultats, eux aussi écrits dans un tableau. L'ordre de calcul des résultats dans le tableau d'arrivée suit une logique particulière. Les bits de l'adresse du résultat sont partiellement inversés comparé aux bits de l'adresse normale.
Par exemple, pour un tableau de 8 cases, numérotées 0,1, 2, 3, 4, 5, 6, 7, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7.
Ordre normal
Ordre FFT
000
000
001
100
010
010
011
110
100
001
101
101
110
011
111
111
Les DSPs disposent d'un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire, afin de gérer plus facilement les calculs de FFT. Une autre technique consiste à calculer nos adresses différemment. Lors de l'ajout d'un indice à notre adresse, la direction de propagation de la retenue de l'addition est inversée. Certains DSP disposent d'instructions pour faire de genre de calculs.
У этого термина существуют и другие значения, см. Батурин (значения). ГородБатуринукр. Батурин Флаг[d] Герб[d] 51°20′ с. ш. 32°53′ в. д.HGЯO Страна Украина Статус центр общины Область Черниговская область Район Нежинский Община Батуринская городская История и �...
Torneo Roberto Gomes Pedrosa 1969 Competizione Torneo Roberto Gomes Pedrosa Sport Calcio Edizione 3ª Organizzatore CBD Date dal 6 settembre 1969al 7 dicembre 1969 Luogo Brasile Partecipanti 17 Risultati Vincitore Palmeiras(2º[1] titolo) Statistiche Miglior marcatore Edu(América-RJ), 14 gol Incontri disputati 142 Gol segnati 381 (2,68 per incontro) Pubblico 3 133 514 (22 067 per incontro) Cronologia della competizione 1968 1970 Manuale Il Torn...
Esloveno slovenščinaHablado en Eslovenia EsloveniaAustria Austria (en varios pueblos de Carintia)Italia Italia (en varios pueblos de Friul-Venecia Julia)Croacia CroaciaRegión CentroeuropaHablantes 2,2 millonesFamilia Indoeuropeo Baltoeslavo Eslavo Eslavo meridional Esl. merid. occidental ...
Supercoppa Sudamericana 1997 Competizione Supercoppa Sudamericana Sport Calcio Edizione 10ª Organizzatore CONMEBOL Date 21 agosto - 4 dicembre 1997 Partecipanti 17 Risultati Vincitore River Plate(1º titolo) Secondo San Paolo Statistiche Miglior marcatore Ivo Basay (Colo-Colo),8 gol Incontri disputati 42 Gol segnati 171 (4,07 per incontro) Cronologia della competizione 1996 Manuale La Supercoppa Sudamericana 1997 è stata la decima e ultima edizione del torneo. Alla ma...
Preparing food using heat This article is about the preparation of food specifically via heat. For a general outline, see Outline of food preparation. For varied styles of international food, see cuisine. A man cooking in a restaurant kitchen, Morocco Cooking, also known as cookery or professionally as the culinary arts, is the art, science and craft of using heat to make food more palatable, digestible, nutritious, or safe. Cooking techniques and ingredients vary widely, from grilling food o...
Pour les articles homonymes, voir Haren. Cet article est une ébauche concernant la Région de Bruxelles-Capitale. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Consultez la liste des tâches à accomplir en page de discussion. Haren L'église Sainte-Élisabeth à Haren. Administration Pays Belgique Région Région de Bruxelles-Capitale Communauté Communauté française Communauté flamande Arrondi...
Jari Litmanen Litmanen nel 2015 Nazionalità Finlandia Altezza 181 cm Peso 76 kg Calcio Ruolo Centrocampista Termine carriera 1º gennaio 2012 CarrieraGiovanili 1977-1987 Reipas LahtiSquadre di club1 1987-1990 Reipas Lahti86 (28)1991 HJK27 (16)1992 MyPa18 (7)1992-1999 Ajax159 (91)1999-2001 Barcellona21 (3)2001-2002 Liverpool26 (5)2002-2004 Ajax20 (5)2004 Lahti11 (3)2005 Hansa Rostock13 (1)2005-2007 Malmö FF10 (3)2008 Fulham0 ...
Peta menunjukkan lokasi Bolinao Data sensus penduduk di Bolinao Tahun Populasi Persentase 199553.127—200061.0683.03%200769.5681.81% Bolinao adalah munisipalitas yang terletak di provinsi Pangasinan, Filipina. Pada tahun 2010, munisipalitas ini memiliki populasi sebesar 72.208 jiwa dan 14.442 rumah tangga. Pembagian wilayah Secara administratif Bolinao terbagi menjadi 30 barangay, yaitu: Arnedo Balingasay Binabalian Cabuyao Catuday Catungi Concordia (Pob.) Culang Dewey Estanza Germinal (Pob....
Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada November 2022. Kaori SakamotoSakamoto pada tahun 2018Informasi PribadiMewakili negara JepangLahir9 April 2000 (umur 24)Kobe, JepangDaerah asalKobe, JepangTempat tinggalKobe, JepangPelatihSonoko Nakano Mitsuko Graham Sei KawaharaKoreograferBenoît RichaudMa...
Распространение языков в Словакии по переписи 1910 года. Распространение языков в Словакии по переписи 2011 года. Языки Словакии — языки, распространённые в Словакии. Официальный государственный язык — словацкий, принадлежащий к группе славянских языков. Венгерский �...
Disambiguazione – Se stai cercando altri significati, vedi Amsterdam (disambigua). Questa voce o sezione sull'argomento Paesi Bassi è priva o carente di note e riferimenti bibliografici puntuali. Sebbene vi siano una bibliografia e/o dei collegamenti esterni, manca la contestualizzazione delle fonti con note a piè di pagina o altri riferimenti precisi che indichino puntualmente la provenienza delle informazioni. Puoi migliorare questa voce citando le fonti più precisamente. Amsterd...
Disambiguazione – Se stai cercando altri significati, vedi Sondrio (disambigua). Sondriocomune Sondrio – VedutaPanorama della città LocalizzazioneStato Italia Regione Lombardia Provincia Sondrio AmministrazioneSindacoMarco Scaramellini (Ind. di centrodestra[1]) dal 26-6-2018 (2º mandato dal 15-5-2023) TerritorioCoordinate46°10′10.99″N 9°52′12″E46°10′10.99″N, 9°52′12″E (Sondrio) Altitudine307 m s.l.m. Superficie20...
Magentacomune Magenta – VedutaPanorama della città di Magenta con la basilica di San Martino LocalizzazioneStato Italia Regione Lombardia Città metropolitana Milano AmministrazioneSindacoLuca Del Gobbo (centro-destra) dal 26-6-2022 TerritorioCoordinate45°27′36.9″N 8°52′35.8″E45°27′36.9″N, 8°52′35.8″E (Magenta) Altitudine138 m s.l.m. Superficie21,99 km² Abitanti24 602[1] (31-3-2024) Densità1 118,78 ab./km² F...
Isotope of hydrogen with two neutrons For other uses, see Tritium (disambiguation). 3H redirects here. For other uses, see 3H (disambiguation). Tritium, 3HGeneralSymbol3HNamestritium, 3H, H-3,hydrogen-3, T, 3TProtons (Z)1Neutrons (N)2Nuclide dataNatural abundance10−18 in hydrogen[1]Half-life (t1/2)12.32 yearsIsotope mass3.01604928 DaSpin1/2Excess energy14949.794±0.001 keVBinding energy8481.7963±0.0009 keVDecay products3HeDecay modesDecay modeDecay energy (M...
SbarraSaint Louis 1904 Informazioni generaliLuogoFrancis Field, Saint Louis Periodo28 ottobre PartecipantiDato sconosciuto Podio Anton Heida Stati Uniti Ed Hennig Stati Uniti George Eyser Stati Uniti Edizione precedente e successiva Prima apparizione Parigi 1924 Voce principale: Ginnastica ai Giochi della III Olimpiade. Ginnastica a Sanit Louis 1904 Individuale Concorso individuale generale Concorso individuale - Tre eventi Concorso individuale - Quattro eventi Parall...
Canadian specialty television channel Television channel DejaViewCountryCanadaBroadcast areaNationwideHeadquartersToronto, OntarioProgrammingPicture format1080i HDTV(downscaled to letterboxed 480i for the SDTV feed)OwnershipOwnerCorus EntertainmentHistoryLaunchedSeptember 4, 2001 (2001-09-04), 23 years agoLinksWebsitedejaviewtv.ca DejaView is a Canadian English language specialty television channel owned by Corus Entertainment. It primarily airs television shows from the 1970s ...