Dark Mode

Aller au contenu

Architecture 16 bits

Un article de Wikipedia, l'encyclopedie libre.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article ne cite pas suffisamment ses sources ().

Si vous disposez d'ouvrages ou d'articles de reference ou si vous connaissez des sites web de qualite traitant du theme aborde ici, merci de completer l'article en donnant les references utiles a sa verifiabilite et en les liant a la section << Notes et references >>.

En pratique : Quelles sources sont attendues ? Comment ajouter mes sources ?
Le WDC 65C816S, un microprocesseur 16 bits

En informatique, l'architecture 16 bits est un type de structure d'ordinateur exploitant des mots (processeur, memoire, bus, etc.) d'une taille de 16 bits (soit deux octets).

Un mot de 16 bits peut stocker 216 valeurs differentes, soit 65 536 valeurs. Un processeur 16 bits peut donc directement adresser 64 kio de memoire.

Au milieu des annees 1960, les premiers ordinateurs 16 bits commercialises incluent le HP-2116[1] de HP, le PDP-11 de DEC et le Nova de Data General. Ils sont concus et fabriques a base de composants discrets et de ce fait relativement complexes et volumineux.

Vers le milieu des annees 1970, des microprocesseurs 8/16 bits (bus de donnees 8 bits, bus d'adresse de 16 bits) se multiplient, comme le Zilog Z80, le MOS Technology 6502 ou le Motorola 6809[ref. necessaire].

Le TMS9900 (en) de Texas Instruments est un des premiers microprocesseurs 16 bits, et a ete utilise dans les ordinateurs familiaux TI-99/4 a partir de 1979[2].

Au debut des annees 1980, les constructeurs developpent des microprocesseurs 16 bits, comme l'Intel 8086, l'Intel 80286 et le WDC 65C816. Les registres et les instructions arithmetiques de l'Intel 8088 operaient sur des entiers de 16 bits, mais sa memoire et son bus de donnees externe ne sont que de 8 bits de large[3].

Un entier de 16 bits permet de stocker 216 (soit 65 536) valeurs differentes. Dans une representation non signee, ces valeurs sont des entiers compris entre 0 et 65 535. Dans une representation en complement a deux, ces valeurs sont comprises entre -32 768 et 32 767. Par consequent, un processeur gerant des adresses memoire de 16 bits peut acceder directement a 64 kio de memoire.

Modeles de la memoire 16 bits

[modifier | modifier le code]
Cette section a besoin d'etre recyclee (novembre 2014).
Une reorganisation et une clarification du contenu sont necessaires. Ameliorez-la ou discutez des points a ameliorer.
Cette section ne cite pas suffisamment ses sources (aout 2013).
Pour l'ameliorer, ajoutez des references de qualite et verifiables (comment faire ?) ou le modele {{Reference necessaire}} sur les passages necessitant une source.

Les processeurs 16 bits ont disparu de l'industrie des ordinateurs personnels actuels (remplace par les 32 bits puis les 64 bits), mais ils restent en service dans une grande variete d'applications embarquees. Par exemple, le processeur XAP 16 bits est utilise dans de nombreux circuits ASIC.

Intel 8086, 80186 et 80286

[modifier | modifier le code]

En 1978, Intel utilise des registres 16 bits dans son 8086. Une adresse peut representer un espace de 64 Ko comme sur le 8080/8085 mais le processeur utilise differents registres de segment 16 bits selon les instructions. Chaque segment pointe sur une zone de la memoire et elargit l'adresse a 20 bits, la veritable adresse physique est calculee par segment * 16 + offset (l'offset etant celui specifie comme adresse). Le 8086 peut ainsi acceder a 1 Mo de memoire malgre ses registres 16 bits, a condition de jouer sur les contenus des registres de segment pendant l'execution.

Les registres de segment sont au nombre de quatre :

  • CS est utilise par le pointeur de code, il indique ou executer la prochaine instruction, il est implicite dans les instructions de saut ou d'appel de routines ;
  • SS pointe sur la pile d'execution pour les adresses de retour des CALL ou le passage de parametres, il est lui aussi implicite ;
  • DS et ES sont en usage libre pour l'acces aux donnees.

Ce mode d'acces a la memoire est assez lourd puisqu'a un moment donne, seuls 64 Ko de code, 64 Ko de pile et deux blocs de 64 Ko de donnees sont accessibles sans modifier le contenu des registres de segment.

Ce mode est dit reel car le registre segment et l'offset representent directement la veritable adresse physique. Il est dangereux puisque le programme peut ecrire a n'importe quelle adresse, pire encore il peut le faire de plusieurs facons differentes (une meme adresse physique peut etre representee de multiples manieres avec des segments et offsets differents). Neanmoins, le modele permet une transposition assez simple des programmes developpes pour les processeurs 8 bits, et facilite l'architecture interne en utilisant un bus interne de 16 bits qui n'induit aucun retard pour vehiculer les donnees de registre a registre ou de registre a memoire. Il permet aussi de separer physiquement le code et les donnees si l'on gere correctement le calcul des segments.

Le 80186 qui lui succede en 1982 fonctionne comme le 8086 en matiere d'adressage memoire. Il sera principalement employe comme un 8086 plus rapide, ses frequences allant au dela de celles de son predecesseur.

Avec le 80286 qui apparait lui aussi debut 1982, Intel met en place un mode protege : le registre de segment pointe alors vers un bloc de donnees appele descripteur, qui pointe vers la veritable zone memoire et l'isole des autres segments. De plus, le segment de code est protege contre l'ecriture pendant l'execution. La largeur du bus d'adresse passe a 24 bits, le processeur peut donc adresser 16 Mo de memoire. Le mode protege possede aussi des dispositifs de commutation de taches.

Un mode reel compatible avec le 8086 reste accessible sur le 80286, mais cela le cantonne dans le role d'un super 8086 plus rapide pour MS-DOS et Windows 3. Le changement de mode implique un reset du processeur et implique generalement de rester dans le mode protege, interdisant la compatibilite avec les programmes MS-DOS. En dehors des systemes XENIX et OS/2, peu d'applications beneficient du mode protege du 80286. Il ouvre neanmoins la porte au mode protege du futur 32 bits Intel 80386.

Motorola 68000 et 68010

[modifier | modifier le code]

De son cote, Motorola choisit en 1979 de reproduire dans son 68000 le modele des processeurs 8 bits : donnees sur 16 bits (au lieu de 8), adresses sur 32 (au lieu de 16). Mais Motorola va plus loin car tous les registres ont une taille de 32 bits : les instructions peuvent ainsi gerer les donnees sur 8, 16 ou 32 bits bien que l'ALU et le bus interne soient de 16 bits.

Les adresses peuvent etre exprimees sur 32 bits lineaires, toutefois l'espace physique reellement accessible est de 16 Mo en raison des limites du bus a 24 signaux d'adresse.

Ce modele est lui aussi un mode reel et les adresses physiques correspondent directement aux adresses dans les registres. Toutefois le 68000 possede quatre etats qui permettent de separer la memoire en quatre zones protegees les unes des autres selon l'etat, pour empecher par exemple le programme utilisateur d'ecrire dans les zones superviseur.

Motorola ajoute quelques ameliorations dans le 68010 mais le modele memoire ne change pas fondamentalement.

Modeles memoire des compilateurs sur 16 bits Intel

[modifier | modifier le code]

Les compilateurs de langages de programmation sont confrontes au modele de la memoire segmentee sur les processeurs Intel. En raison du mode memoire lineaire sur le Motorola 68000, les compilateurs n'ont generalement pas a gerer la taille des pointeurs, bien que maniere les pointeurs 32 bits soient ralentis par un bus interne de 16 bits seulement.

Le Turbo Pascal 3.0[4] de Borland fait l'impasse et les registres segment ne changent pas de valeur tout au long de la vie du programme : on peut donc avoir un programme d'au maximum 64 Ko de code, utilisant au maximum 64 Ko de donnees et 64 Ko de pile (la pile cependant peut depasser la limite). Des librairies de Turbo Power[5] pour ce compilateur gerent les segments pour relier plusieurs parties de code ou utiliser davantage de donnees, au detriment de la vitesse d'execution.

Mais la plupart des compilateurs vont s'ecarter de ce modele simpliste, y compris Borland a partir de Turbo Pascal 4.0 et vont utiliser soit des adressages near sur seulement 16 bits d'adresse, soit des adressages far combinant 16 bits de segment et 16 bits d'adresse. L'utilisation des pointeurs far penalise la vitesse d'execution, mais donne acces a tout l'espace memoire surtout a partir du 80286 qui peut acceder a 16 Mo.

Dans les compilateurs Turbo Pascal, le choix des pointeurs near ou far pour le code est effectue par le compilateur selon la proximite du code, et les donnees sont toujours en pointeurs far. L'utilisateur peut forcer le compilateur a n'utiliser que des pointeurs far dans le code a l'aide d'une option ou d'une directive de compilation.

Dans le compilateur Borland C++, le choix est accessible par le biais des mots cles ajoutes au langage near far et huge, et des options de compilation choisissent le modele memoire a employer par le compilateur[6] :

Modeles memoire de Borland C++ 3.1
Modele Pointeur de code Pointeur de donnees Remarque
tiny near (16) near (16) Code et donnees sont dans le meme segment (les registres CS, DS, ES, SS pointent vers le meme segment). Les pointeurs near sont toujours utilises. Code, donnees et pile ensemble ne peuvent pas exceder 64 Ko
small near (16) near (16) Code et donnees sont dans des segments differents, et les pointeurs near sont toujours utilises. Il y a 64 Ko d'espace disponible pour le code et 64 Ko pour les donnees et la pile.
medium far (32) near (16) Le code utilise des pointeurs far permettant l'acces a 1 Mo de code. Les pointeurs de donnees restent du type near limitant les donnees a 64 Ko.
compact near (16) far (32) Les donnees utilisent des pointeurs far pour 1 Mo de donnees, le code reste sur des pointeurs near permettant 64 Ko de code. Les donnees statiques utilisent des pointeurs near et sont limitees a 64 Ko separes.
large far (32) far (32) Code et donnees peuvent acceder a 1 Mo chacun. Les donnees statiques utilisent des pointeurs near et sont limitees a 64 Ko separes.
huge far (32) far (32) Code et donnees accedent a 1 Mo, y compris les donnees statiques.

Des modeles similaires sont disponibles avec le compilateur Microsoft C/C++ des 1983[7].

Types de donnees compilateurs sur processeur 16 bits

[modifier | modifier le code]

Les compilateurs de l'ere 16 bits proposent generalement des types de donnees entieres d'une taille predeterminee :

Types de nombres entiers 16 bits
Modele de donnees short int long Pointeurs
IP16L32 (near) 16 16 32 16
I16LP32 (far) 16 16 32 32

Lors du passage aux processeurs 32 bits et au modes proteges, les entiers int passeront parfois a 32 bits en particulier en langage C et C++ : ils ne definissent pas strictement la taille du type int qui est laissee a l'appreciation du compilateur. Le type int etant facultatif car type par defaut, les modificateurs short et long exprimes seuls sont geres comme des synonymes de short int et long int par le compilateur.

En langage Pascal il n'y a pas de type de donnees par defaut, Borland propose alors plusieurs types de donnees entieres[8] pour un usage optimal selon les besoins :

Types de donnees Turbo Pascal
Type Valeurs Taille en octets Equivalent C
Byte 0 a 255 1 unsigned char
Shortint -128 a 127 1 char
Integer -32768 a 32767 2 short (int) ou int
Word 0 a 65535 2 unsigned short (int) ou unsigned int
Longint -2147483648 a 2147483647 4 long (int)

Le Motorola 16/32 68000 et l'Intel 386SX

[modifier | modifier le code]
Cette section ne cite pas suffisamment ses sources (janvier 2023).
Pour l'ameliorer, ajoutez des references de qualite et verifiables (comment faire ?) ou le modele {{Reference necessaire}} sur les passages necessitant une source.

Le Motorola 68000 est parfois qualifie de 16 bits parce que son bus de donnees et son unite arithmetique et logique ont 16 bits de large, et son bus memoire ne peut adresser que 16 Mio de memoire vive. Il expose toutefois une architecture 32 bits dans la mesure ou ses registres generaux ont une capacite de 32 bits et que la plupart des instructions arithmetiques supportent des entiers de 32 bits. Les programmes ecrits pour le Motorola 68000 sont donc compatibles avec les processeurs 32 bits de la famille M68k et exploitent pleinement leurs capacites 32 bits.

Le processeur 68000 de la Sega Mega Drive fut tres mis en avant dans les publicites, la console ayant meme une inscription << 16-bit >> sur le dessus de sa coque, ce qui conduisit cette periode de l'histoire des consoles de jeux video a etre qualifiee d'<< ere 16 bits >>.[ref. necessaire]

De nombreuses machines familiales de l'epoque utiliserent le microprocesseur 68000 : le Macintosh, l'Amiga 500, l'Atari ST[9], le Sharp X68000 mais egalement la console Neo-Geo AES. Le 68000 fut utilise dans la console Jaguar d'Atari, presentee a l'epoque comme la premiere 64 bits du marche (alors que seule une partie de son architecture etait effectivement 64 bits).

Une analyse similaire s'applique a l'Intel 80386SX, microprocesseur bas de gamme, qui est egalement un processeur 32 bits associe a un bus de donnees 16 bits.

Notes et references

[modifier | modifier le code]
  1. | Name: 2116B, sur hpmuseum.net, consulte le 24 decembre 2012
  2. | (en) Walden C. Rhines, << The Inside Story of Texas Instruments' Biggest Blunder: The TMS9900 Microprocessor >>,
  3. | (en) << Intel 8088 microprocessor family >>, sur www.cpu-world.com (consulte le )
  4. | (en) Turbo Pascal Reference Manual, Borland International, , 438 p. (ISBN 0-87524-003-8, lire en ligne), p. 226
  5. | << TurboPower Software Company >>, sur www.turbopower.com (consulte le )
  6. | (en) Borland C++ 3.1 Programmers Guide, Borland International, , 483 p. (lire en ligne), p. 346
  7. | Computer Language - Issue 06 (1985-02)(CL Publications)(US), (lire en ligne)
  8. | (en) Turbo Pascal 6.0 User's Guide, Borland International, , 271 p. (lire en ligne), p. 31
  9. | <> signifiant Sixteen/Thirty-two, indiquant l'architecture du processeur en 16/32 bits.

Articles connexes

[modifier | modifier le code]
v * m
Technologies de processeur
Modeles
Architecture
General
Mots
Instruction
Jeu
Famille
Execution
Performance
Types
General
Par usage
On chip
Acceleration
materielle
Microarchitecture
Parallelisme
General
Processus
Taxonomie de Flynn
Circuiterie et unite
General
Execution
Porte logique
Registre
Controle
Chemin de donnees
Cadencement
Gestion de l'alimentation
Fabrication
Articles lies