Compteur de programme - Program counter

Panneau avant d'un ordinateur IBM 701 introduit en 1952. Les voyants du milieu affichent le contenu de divers registres. Le compteur d'instructions est en bas à gauche.

Le compteur de programme ( PC ), communément appelé le pointeur d'instruction ( IP ) dans Intel x86 et Itanium des microprocesseurs , et parfois appelé le registre d'adresse d'instruction ( IAR ), le compteur d'instruction ou d'une partie seulement du séquenceur d'instruction, est un registre de processeur qui indique où se trouve un ordinateur dans sa séquence de programmes .

Habituellement, le PC est incrémenté après avoir récupéré une instruction , et conserve l' adresse mémoire de (" pointe vers") l'instruction suivante qui serait exécutée.

Les processeurs récupèrent généralement les instructions séquentiellement à partir de la mémoire, mais les instructions de transfert de contrôle changent la séquence en plaçant une nouvelle valeur dans le PC. Ceux-ci incluent les branches (parfois appelées sauts), les appels de sous - programmes et les retours . Un transfert qui est conditionnel à la véracité d'une affirmation permet à l'ordinateur de suivre une séquence différente dans des conditions différentes.

Une branche prévoit que l'instruction suivante est récupérée ailleurs en mémoire. Un appel de sous-programme non seulement branche mais enregistre le contenu précédent du PC quelque part. Un retour récupère le contenu sauvegardé du PC et le replace dans le PC, reprenant l'exécution séquentielle avec l'instruction suivant l'appel du sous-programme.

Implémentation matérielle

Dans une simple unité centrale de traitement (CPU), le PC est un compteur numérique (qui est à l'origine du terme «compteur de programme») qui peut être l'un de plusieurs registres matériels . Le cycle d'instructions commence par une extraction , dans laquelle la CPU place la valeur du PC sur le bus d'adresse pour l'envoyer à la mémoire. La mémoire répond en envoyant le contenu de cet emplacement mémoire sur le bus de données . (Il s'agit du modèle informatique à programme stocké , dans lequel un seul espace mémoire contient à la fois des instructions exécutables et des données ordinaires.) Après l'extraction, l'unité centrale procède à l' exécution , en prenant une action basée sur le contenu de la mémoire qu'elle a obtenu. À un moment donné de ce cycle, le PC sera modifié de sorte que l'instruction suivante exécutée soit différente (généralement, incrémentée de sorte que l'instruction suivante soit celle commençant à l'adresse mémoire immédiatement après le dernier emplacement mémoire de l'instruction en cours) .

Comme les autres registres du processeur, le PC peut être une banque de verrous binaires, chacun représentant un bit de la valeur du PC. Le nombre de bits (la largeur du PC) est lié à l'architecture du processeur. Par exemple, une CPU «32 bits» peut utiliser 32 bits pour pouvoir adresser 2 à 32 unités de mémoire. Sur certains processeurs, la largeur du compteur de programme dépend plutôt de la mémoire adressable; par exemple, certains contrôleurs AVR ont un PC qui s'enroule après 12 bits.

Si le PC est un compteur binaire, il peut s'incrémenter lorsqu'une impulsion est appliquée à son entrée COUNT UP, ou la CPU peut calculer une autre valeur et la charger dans le PC par une impulsion sur son entrée LOAD.

Pour identifier l'instruction courante, le PC peut être combiné avec d'autres registres qui identifient un segment ou une page . Cette approche permet un PC avec moins de bits en supposant que la plupart des unités de mémoire d'intérêt sont dans le voisinage actuel.

Conséquences dans l'architecture des machines

L'utilisation d'un PC qui s'incrémente normalement suppose que ce qu'un ordinateur fait est d'exécuter une séquence d'instructions généralement linéaire. Un tel PC est au cœur de l' architecture von Neumann . Ainsi, les programmeurs écrivent un flux de contrôle séquentiel même pour des algorithmes qui n'ont pas besoin d'être séquentiels. Le « goulot d'étranglement de von Neumann » qui en a résulté a conduit à des recherches sur le calcul parallèle, y compris les modèles non von Neumann ou de flux de données qui n'utilisaient pas de PC; par exemple, plutôt que de spécifier des étapes séquentielles, le programmeur de haut niveau pourrait spécifier la fonction souhaitée et le programmeur de bas niveau pourrait la spécifier en utilisant la logique combinatoire .

Cette recherche a également conduit à des moyens de rendre les processeurs conventionnels basés sur PC plus rapidement, notamment:

  • Pipelining , dans lequel différents matériels de la CPU exécutent simultanément différentes phases de plusieurs instructions.
  • L' architecture de mot d'instruction très long (VLIW), où une seule instruction peut produire plusieurs effets.
  • Techniques pour prédire l' exécution dans le désordre et préparer les instructions ultérieures pour une exécution en dehors de la séquence régulière.

Conséquences dans la programmation de haut niveau

Les langages de programmation modernes de haut niveau suivent toujours le modèle d'exécution séquentielle et, en effet, une manière courante d'identifier les erreurs de programmation consiste à utiliser une «exécution de procédure» dans laquelle le doigt du programmeur identifie le point d'exécution comme le ferait un PC. Le langage de haut niveau est essentiellement le langage machine d'une machine virtuelle, trop complexe pour être construit en tant que matériel mais plutôt émulé ou interprété par un logiciel.

Cependant, les nouveaux modèles de programmation transcendent la programmation à exécution séquentielle:

  • Lors de l'écriture d'un programme multi-thread , le programmeur peut écrire chaque thread sous la forme d'une séquence d'instructions sans spécifier la synchronisation d'une instruction par rapport aux instructions d'autres threads.
  • Dans la programmation événementielle , le programmeur peut écrire des séquences d'instructions pour répondre aux événements sans spécifier une séquence globale pour le programme.
  • Dans la programmation de flux de données , le programmeur peut écrire chaque section d'un pipeline informatique sans spécifier la synchronisation par rapport aux autres sections.

symbole

Les fournisseurs utilisent différents caractères pour symboliser le compteur de programme dans les programmes en langage assembleur . Alors que l'utilisation d'un caractère «$» est répandue dans la documentation des processeurs Intel , Zilog , Texas Instruments , Toshiba , NEC , Siemens et AMD , Motorola , Rockwell Semiconductor , Microchip Technology et Hitachi utilisent plutôt un caractère «*», tandis que SGS-Thomson La microélectronique utilise "PC".

Voir également

Remarques

Les références