Micros ID n°2 janvier 1987
Micros ID n°2 janvier 1987
  • Prix facial : 22 F

  • Parution : n°2 de janvier 1987

  • Périodicité : trimestriel

  • Editeur : Mieva Presse

  • Format : (206 x 291) mm

  • Nombre de pages : 84

  • Taille du fichier PDF : 123 Mo

  • Dans ce numéro : PC compatible, comment le choisir ?

  • Prix de vente (PDF) : gratuit

Dans ce numéro...
< Pages précédentes
Pages : 34 - 35  |  Aller à la page   OK
Pages suivantes >
34 35
LE MICROPROCESSEUR DES COMPATIBLES PC Les machines compatibles avec l'IBM-PC, et le PC lui-même, sont presque équipées du même microprocesseur : le 8088 de Intel. Mais certaines machines, plus performantes, sont équipées d'autres microprocesseurs, tous fabriqués par Intel (ou ses secondes sources), et tous compatibles avec le 8088 du PC original. Ces processeurs sont : — 8086, véritable version 16 bits. — NEC V20 ou V30, version améliorée par NEC des processeurs Intel. — 80186, version du 8086 incorporant quelques circuits périphériques supplémentaires. — 80286, super microprocesseur 16 bits, jusqu'à six fois supérieur à son petit frère, supporte la mémoire virtuelle jusqu'à 16 méga-octets ! Il équipe les PC/AT. — 80386, super microprocesseur 32 bits, encore trois fois plus rapide que le précédent. C'est lui qui équipera la nouvelle génération naissante de PC. Tous ces microprocesseurs ont une caractéristique commune avec le 8088 : ils exécutent tous le même jeu d'instructions. Il y a bien sûr des instructions supplémentaires, mais elles ne sont pas disponibles sur le PC car elles ne peuvent être utilisées sur toutes les machines. Nous ne parlerons donc pas d'elles dans cet article. Tout ce qui sera dit ici sera 100% compatible avec tous les PC. Lorsque le numéro du CPU (processeur) devra être mentionné, nous citerons le 8086 qui est, historiquement, le premier. LA MEMOIRE Le 8086 est capable d'adresser une mémoire de 1 méga-octets. Cette mémoire est organisée par mot de 8 bits, bien que le CPU traite des données sur 16 bits. Langages- SEMBLEUR 8086 Pour adresser 1 MO, il est nécessaire de disposer de 20 bits, c'est donc la largeur du bus des adresses (contre 16 pour un Z80, qui n'est capable que d'adresser 64 Ko). Ces 20 bits ont posé un problème : le 8086 est un microprocesseur 16 bits, il ne peut donc traiter des nombres sur 20 bits ! Pour résoudre ce problème, les ingénieurs de chez Intel ont choisi une organisation mémoire un peu spéciale : la segmentation. L'espace mémoire total a été divisé en fractions plus courtes : leur taille peut varier de 16 octets à 64 kilooctets. Ces fractions sont baptisées segments. Un segment peut débuter en mémoire à chaque adresse multiple de 16.11y a donc 65536 segments possibles dans le méga-octets adressable par le 8086. Chaque segment est représenté par son numéro d'ordre dans la mémoire. Comme par enchantement, il suffit de 16 bits pour spécifier un numéro de segment, et de 16 autres bits pour spécifier une position particulière dans un segment. Le problème d'adressage est donc résolu : chaque position dans l'espace d'adressage total (1 MO) est spécifié par deux nombres sur 16 bits : un segment et un « offset » (mot anglais utilisé pour désigner la position dans le segment). Pour simplifier la notation, on spécifie une adresse au moyen des deux nombres exprimés en hexadécimal et séparés par le signe':', le segment est placé en tête. Par exemple : 0000:0000, 12AB:0034, FFOA:2345 Le passage de la notation segment:offset vers l'adresse physique effective (5 chiffres hexadécimaux) est facile : ADR = (16 * SEGMENT) + OFFSET C'est encore plus simple si l'on se souvient qu'en hexadécimal, multiplier par 16 revient à décaler à gauche de un chiffre. Il suffit donc d'additionner le segment et l'offset en les décalant de un chiffre. Par exemple : Segment : 12AB Offset : + 0034 Adresse : MMMMMM un■•■■■■•■ 12AE4 Le lecteur perspicace aura remarqué qu'il y a 4096 combinaisons différentes de segment:offset pour représenter le même emplacement mémoire. Voici quelques combinaisons équivalentes : 12AB:0034, 12AC:0033, 11AB:1034 LES REGISTRES Le 8086 dispose de 14 registres de 16 bits accessibles au programmeur. Ils se répartissent en quatre catégories : les registres de données, les registres
SP BP SI DI CS DS SS ES se ASSEMBLEUR d'index et pointeurs, les registres de segment et les registres de contrôle : REGISTRES DE DONNEES (16 bits ou deux fois 8 bits) 7 07 0 AH AL BH BL CH CL DH DL REGISTRES POINTEURS OU D'INDEX (16 bits) 15 0 REGISTRES DE SEGMENT (16 bits) 15 0 8086 POINTEUR DE PILE POINTEUR DE BASE POINTEUR DE SOURCE POINTEUR DE DESTINATION SEGMENT DE CODE SEGMENT DE DONNEES SEGMENT DE PILE SEGMENT SUPPLEMENTAIRE REGISTRES DE CONTROLE (16 bits) AX (ACCUMULATEUR) BX CX DX 15 0 IP POINTEUR D'INSTRUCTION FLAGS REGISTRE D'ETAT Les registres de données, au nombre de quatre, sont accessibles sous forme 16 bits, avec les noms AX, BX, CX et DX, ou sous forme 8 bits, sous les noms AH, AL, BH, BL, CH, CL, DH et DL. Le programmeur pourra utiliser les registres par demi ou intégralement selon ses besoins. La plupart des opérations arithmétiques et logiques peuvent être effectuées sur ces registres, sur 8 ou sur 16 bits. Une des opérandes est toujours un registre, l'autre, s'il y en a une, est soit un autre registre, soit un emplacement (8 ou 16 bits) en mémoire. Certaines opérations nécessitent l'usage spécifique de certains registres. Cela peut paraître limitatif, mais en fait c'est très peu contraignant et offre l'énorme avantage de la compacité et de la rapidité des instructions. Les registres pointeurs ou d'index sont principalement utilisés pour contenir les offsets de données placées en mémoire, même si les opérations arithmétiques et logiques peuvent être employées avec ces registres. Leur spécificité réduit la taille des programmes puisqu'ils sont utilisés pour contenir les adresses des données fréquemment utilisées (adressage indirect). Les deux premiers registres (SP et BP) sont utilisés pour accéder des données placées dans le segment de pile, les deux autres (SI et DI) adressent les données dans le segment de données. Il existe bien sûr un mécanisme qui permet de passer outre ce comportement privilégié. Le registre SP (Stack Pointer) est utilisé comme pointeur de pile lors des appels de sous-programme (instruction CALL) et des instructions spécifiques à la pile (PUSH, POP). Le registre BP (Base Pointer) est principalement utilisé pour accéder aux arguments des fonctions et aux variables locales, ce, dans les programmes générés par les compilateurs aussi bien que dans ceux écrits en assembleur. Les registres SI (Source Index) et Dl (Destination Index) servent essentiellement pour les manipulations de chanes de caractères. Les registres de segment spécifient quatre segments accessibles simultanément. Chacun peut atteindre 64 Ko. Le registre CS (Code Segment) donne le numéro du segment dans lequel se trouve les instructions à exécuter ; le registre DS (Data Segment) contient le numéro du segment dans lequel sont logées les données ; SS (Stock Segment) donrfe le numéro du segment où est logée la pile, et enfin, ES (Extra Segment) donne le numéro d'un segment supplémentaire utilisé par le programmeur comme bon lui semble. Encore une fois, les registres de segment ont un usage privilégié, mais il existe un mécanisme qui permet de passer outre les assignations de défaut. Il est donc tout à fait possible de placer (par exemple) instructions et données dans le même segment, ou au contraire, de créer plusieurs segments de données ou de programme. Nous verrons cela par la suite. Reste les registres de contrôle : IP (Instruction Pointer) et le registre d'état (STATUS WORD ou FLAGS). IP contient l'adresse au sein du segment de code (l'offset dans ce segment) de la prochaine instruction à lire en mémoire. Cette adresse est différente de l'adresse de la prochaine instruction à exécuter car le 8086 dispose d'une petite mémoire interne (une « queue » d'instructions). A suivre.../, François Piette



Autres parutions de ce magazine  voir tous les numéros


Liens vers cette page
Couverture seule :


Couverture avec texte parution au-dessus :


Couverture avec texte parution en dessous :


Micros ID numéro 2 janvier 1987 Page 1Micros ID numéro 2 janvier 1987 Page 2-3Micros ID numéro 2 janvier 1987 Page 4-5Micros ID numéro 2 janvier 1987 Page 6-7Micros ID numéro 2 janvier 1987 Page 8-9Micros ID numéro 2 janvier 1987 Page 10-11Micros ID numéro 2 janvier 1987 Page 12-13Micros ID numéro 2 janvier 1987 Page 14-15Micros ID numéro 2 janvier 1987 Page 16-17Micros ID numéro 2 janvier 1987 Page 18-19Micros ID numéro 2 janvier 1987 Page 20-21Micros ID numéro 2 janvier 1987 Page 22-23Micros ID numéro 2 janvier 1987 Page 24-25Micros ID numéro 2 janvier 1987 Page 26-27Micros ID numéro 2 janvier 1987 Page 28-29Micros ID numéro 2 janvier 1987 Page 30-31Micros ID numéro 2 janvier 1987 Page 32-33Micros ID numéro 2 janvier 1987 Page 34-35Micros ID numéro 2 janvier 1987 Page 36-37Micros ID numéro 2 janvier 1987 Page 38-39Micros ID numéro 2 janvier 1987 Page 40-41Micros ID numéro 2 janvier 1987 Page 42-43Micros ID numéro 2 janvier 1987 Page 44-45Micros ID numéro 2 janvier 1987 Page 46-47Micros ID numéro 2 janvier 1987 Page 48-49Micros ID numéro 2 janvier 1987 Page 50-51Micros ID numéro 2 janvier 1987 Page 52-53Micros ID numéro 2 janvier 1987 Page 54-55Micros ID numéro 2 janvier 1987 Page 56-57Micros ID numéro 2 janvier 1987 Page 58-59Micros ID numéro 2 janvier 1987 Page 60-61Micros ID numéro 2 janvier 1987 Page 62-63Micros ID numéro 2 janvier 1987 Page 64-65Micros ID numéro 2 janvier 1987 Page 66-67Micros ID numéro 2 janvier 1987 Page 68-69Micros ID numéro 2 janvier 1987 Page 70-71Micros ID numéro 2 janvier 1987 Page 72-73Micros ID numéro 2 janvier 1987 Page 74-75Micros ID numéro 2 janvier 1987 Page 76-77Micros ID numéro 2 janvier 1987 Page 78-79Micros ID numéro 2 janvier 1987 Page 80-81Micros ID numéro 2 janvier 1987 Page 82-83Micros ID numéro 2 janvier 1987 Page 84